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”中存储单词。但我写的代码是“分段错误”请帮助
答案 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
}