为什么我的 strcmp 突然结束我的程序?
why is my strcmp ending my program abruptly?
#include <stdio.h>
#include <string.h>
void processString(char *str, int *totVowels, int *totDigits);
int main()
{
char str[50], *p;
int totVowels, totDigits;
printf("Enter the string: \n");
fgets(str, 80, stdin);
if (p = strchr(str, '\n')) *p = '[=10=]';
processString(str, &totVowels, &totDigits);
printf("Total vowels = %d\n", totVowels);
printf("Total digits = %d\n", totDigits);
return 0;
}
void processString(char *str, int *totVowels, int *totDigits)
{
int i, j;
char tester[11] = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
*totDigits = 0;
*totVowels = 0;
for (i = 0; i < strlen(str); i++)
{
if (isdigit(str[i]))
{
*totDigits += 1;
}
else if(isalpha(str[i]))
{
for (j = 0; j < 11; j++)
{
if (strcmp(str[i], tester[j]) == 0)
{
*totVowels+=1;
}
}
}
}
}
我的代码正在尝试计算数字和元音字母在字符串中出现的次数。
我的字符串比较试图检查元音,但程序在到达 strcmp
行时结束。为什么会这样?我的语法有误吗?
P.S。我只允许在processString
功能中编辑,其余的都给了。
你的问题出在代码if (strcmp(str[i], tester[j]) == 0)
上。因为您引用的是一维数组,所以取消引用是单个字符。本质上,您是在比较两个 chars
,而 chars
可以像 ints
一样进行相等比较。而 strcmp
是为比较 字符串 而设计的,而不是单个 chars
。这就是它出现段错误的原因(段错误是由于无效的指针取消引用引起的。在这种情况下,它试图取消引用一个非指针。绝对不行。)
修复方法是将该行替换为:if (str[i] == tester[j])
。
#include <stdio.h>
#include <string.h>
void processString(char *str, int *totVowels, int *totDigits);
int main()
{
char str[50], *p;
int totVowels, totDigits;
printf("Enter the string: \n");
fgets(str, 80, stdin);
if (p = strchr(str, '\n')) *p = '[=10=]';
processString(str, &totVowels, &totDigits);
printf("Total vowels = %d\n", totVowels);
printf("Total digits = %d\n", totDigits);
return 0;
}
void processString(char *str, int *totVowels, int *totDigits)
{
int i, j;
char tester[11] = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
*totDigits = 0;
*totVowels = 0;
for (i = 0; i < strlen(str); i++)
{
if (isdigit(str[i]))
{
*totDigits += 1;
}
else if(isalpha(str[i]))
{
for (j = 0; j < 11; j++)
{
if (strcmp(str[i], tester[j]) == 0)
{
*totVowels+=1;
}
}
}
}
}
我的代码正在尝试计算数字和元音字母在字符串中出现的次数。
我的字符串比较试图检查元音,但程序在到达 strcmp
行时结束。为什么会这样?我的语法有误吗?
P.S。我只允许在processString
功能中编辑,其余的都给了。
你的问题出在代码if (strcmp(str[i], tester[j]) == 0)
上。因为您引用的是一维数组,所以取消引用是单个字符。本质上,您是在比较两个 chars
,而 chars
可以像 ints
一样进行相等比较。而 strcmp
是为比较 字符串 而设计的,而不是单个 chars
。这就是它出现段错误的原因(段错误是由于无效的指针取消引用引起的。在这种情况下,它试图取消引用一个非指针。绝对不行。)
修复方法是将该行替换为:if (str[i] == tester[j])
。