分段错误(核心转储)字符数组

时间:2015-11-12 00:14:48

标签: c segmentation-fault

我试图读取用户的一个句子并将其变成一个数组,其中每个字母都包含一个字符值。每次运行程序时,我都能输入句子,但之后会出现“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;
}

2 个答案:

答案 0 :(得分:1)

使用-Wall -Wextra编译时,编译器会说什么。您无法正确编写C代码而无需编译警告。每个人都说你有多么糟糕,你可以搞砸C代码,它可以让你做任何事情。这是真的,但警告可以帮助你。

我不确定为什么有人要求您前往gdbvalgrind。对我来说,这个代码永远不应该被执行并期望是正确的。我的编译器吐出这些警告:

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开始,因为单独的句子没有数组索引指示是一个内存地址本身。请注意,如果句子始终以“'”结尾,则此方法有效。或者是'。虽然我相信有一个更好的方法来做到这一点,而不是一次读一个字符。