我试图从用户那里读取一个句子并将其放入一个数组中,其中每个字母保存一个字符值。每次运行该程序时,我都可以输入句子,但之后会出现“段错误(核心转储)”。所有这些都发生在从 main 调用的函数内。
int words(char sentence[]){
int i=0;
printf("Please enter your favorite sentence(max 100 characters).\n");
scanf("%c", &sentence);
while(sentence != "." && sentence != "!"){
i++;
scanf("%c", &sentence[i]);
}
printf("%d", i);
return i;
}
最佳答案
当您使用 -Wall -Wextra
进行编译时,编译器会说什么。如果不带警告进行编译,就不能指望正确编写 C 代码。每个人都说你可以把 C 代码搞砸得多么严重,它可以让你做任何事情。确实如此,但警告可以为您提供帮助。
我不知道为什么人们要求你去 gdb
或 valgrind
。对我来说,这段代码永远不应该被执行并期望它是正确的。我的编译器发出这些警告:
words.c: In function ‘words’:
words.c:6: warning: format ‘%c’ expects type ‘char *’, but argument 2 has type ‘char **’
words.c:7: warning: comparison with string literal results in unspecified behavior
words.c:7: warning: comparison with string literal results in unspecified behavior
修复这些警告,如果问题仍然存在,请返回。或者,如果您不明白这些警告的含义,请提出相关的具体问题。
关于c - 段错误(核心转储)字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662282/