gpt4 book ai didi

c - 对变量的赋值在完全不相关的函数中给出了段错误

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

我复制了一些代码,这些代码只是将一个文件读取为一个字符串,然后从一个旧程序中打印该字符串。它工作正常,所以我决定稍微修改一下。新程序是

#include <stdio.h>
#include <string.h>

int main() {
FILE *itemlist = fopen("itemlist", "r");
char *currentstring, charbuffer[2];
// char itemstart = 0;
while (fgets(charbuffer, 2, itemlist)) {
strcat(currentstring, charbuffer);
}
printf("%s", currentstring);
return 0;
}

它按预期工作。但是当我取消注释 itemstart 行时,它给出了一个段错误。我什至没有使用它,就我而言,将 char 初始化为 0 并不是非法的。我认为这是类型的问题,然后我将其更改为 short,然后更改为 int,但它仍然出现段错误。

但是后来我删除了 = 0 部分并且它再次起作用。然后我决定把它放回去,用 gdb 调试二进制文件,段错误在 strcat

这怎么可能?

最佳答案

currentstring 是一个悬挂指针,因此 strcat(currentstring, charbuffer); 导致未定义的行为。

可能取消注释 char itemstart = 0 将一些内存初始化为 0 并且访问冲突可见,但这只是一个猜测。未定义的行为意味着任何事情都可能发生。

你应该为currentstring分配内存:

currentstring = malloc(10); //or whatever length you need

关于c - 对变量的赋值在完全不相关的函数中给出了段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10147670/

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