gpt4 book ai didi

c - 使用数组的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:23 25 4
gpt4 key购买 nike

好吧,我一直都在做这件事,我确切地知道问题出在哪里,但不知道如何解决。我已经知道 fgets 和 scanf 对于这个程序会更好,但我不能那样做。

该程序大约在 10 分钟前运行,然后我更改了它并遇到了段错误。然后我把它改回来,仍然有段错误。无论如何,我相信新鲜的眼睛会马上看到它。有它:D

PS:请注意我的 (lessthan) 而不是 < 因为我不知道如何在我的代码示例中正确地保留它们 :(

#define WORDLENGTH 15
#define MAXLINE 1000

int main()
{
char *line[MAXLINE];
int i = 0;
int j;
int n;
char c;


for (n=0; c!=EOF; n++){
char *tmp = (char *) malloc(sizeof(char)*WORDLENGTH);
while ((c=getchar())!=' ')
tmp[i++]=c;
line[n]=tmp;
i=0;
printf("\n%s\n",line[n]); //
}

for(j = 0; j < n; j++){
printf("\n%s\n", line[j]);
free (line[j]);
}

return 0;
}

最佳答案

你在做什么line[n++] = tmp .然后访问 line[n]在那之后。但是line[n]尚未分配。

要改变它,你可以打印line[n-1]相反,但更清楚的是:

line[n] = tmp;
i = 0;
printf(... line[n]);

并将增量放在 for 语句中,即 for (n = 0; c != EOF; n++) .

编辑

这是我要做的事情的总结:

放置i=0在循环开始时赋值。从逻辑上讲,它是 i 的初始化。目前它在两个地方完成(在 int i = 0; 和分配给 line[n] 之后)。这两个地方都不接近人们期望对 while 中使用的变量进行初始化的地方。循环成为。

通过检查 i 来防止无意义的输入不超过 WORDLENGTH-1 .实际上,我可能会编码内部 while循环为 for我喜欢这样循环:

for (i = 0; i < WORDLENGTH; i++) {
tmp[i] = getchar();
if (tmp[i] == ' ') break;
}
tmp[i] = 0;

或(以我的角色)for(i = 0; i < WORDLENGTH; ++i) if ((tmp[i] = getchar()) == ' ') break;其次是..

tmp[i] = 0以 NUL 终止字符串。自 malloc不一定返回一个 0 填充的内存块。

关于c - 使用数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4332201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com