String Array实现返回分段错误

时间:2016-09-05 20:00:05

标签: c arrays string segmentation-fault

int main(void)
{
    const char* line = "This isn't working";
    char* str[10];
    int index = 0;

    for(int i = 0; i < 10; i++)
    {

        int j = 0;
        str[i] = malloc(10 * sizeof(char));
        while(line[index] != ' ')
        {

            str[i][j] = line[index];
            j++;
            index++;
        }
        index++;
        if(index == strlen(line) - 1)
            break;


    }

    for(int i = 0; i < 10; i++)
    {

        printf("%s\n", str[i]);
    }



}

我正在尝试创建一个字符串数组,我想在其变量“line”中存储单词。但我写的代码是“分段错误”请帮助

2 个答案:

答案 0 :(得分:1)

需要使用NUL终止C字符串。内循环后,您可以说str[i][j] = '\0'来解决此问题。

代码中至少还有一个问题:当你到达line的最后一个单词时,没有空间来终止内循环,因此内循环将继续运行并运行阅读不相关的记忆,直到你碰巧遇到永不落地的空间角色。

答案 1 :(得分:1)

在示例字符串"This isn't working"上,您的while(line[index] != ' ')将永久有效。在此循环之后,仅进行一次长度检查。因此,你有不确定的行为。这可能是您遇到问题的主要原因。关于这个主题的好文章"Undefined behavior can result in time travel"

要解决此问题,请将while循环条件更改为:

int strLength = strlen(line);
while (index < strLength && line[index] != ' ')
{
  // Do the job here
}