我试图读取用户的一个句子并将其变成一个数组,其中每个字母都包含一个字符值。每次运行程序时,我都能输入句子,但之后会出现“Segmentation Fault(core dumped)”。所有这些都发生在从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;
}
答案 0 :(得分:1)
使用-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
修复这些警告,如果仍有问题,请再回来。或者,如果您不了解这些警告的含义,请询问有关它的具体问题。
答案 1 :(得分:0)
将您的代码更改为此代码,它将起作用:
[
{
"id": "",
"benefitId": "",
"isSecIns": "",
"isNoResId": "",
"expenseTypeId": "",
"fromDate": "",
"toDate": "",
"provider": "",
"who": "",
"depId": "",
"age": "",
"amount": "",
"comments": "",
"isOffset": false
}
]
你只需删除'&'从第四行的scanf开始,因为单独的句子没有数组索引指示是一个内存地址本身。请注意,如果句子始终以“'”结尾,则此方法有效。或者是'。虽然我相信有一个更好的方法来做到这一点,而不是一次读一个字符。