【发布时间】:2012-04-26 05:18:45
【问题描述】:
我复制了一些代码,这些代码只是将文件读取到字符串并从旧程序打印字符串。它工作正常,所以我决定对其进行一些修改。新程序是
#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调试二进制,segfault在strcat。
这怎么可能?
【问题讨论】:
-
currentstring指向什么? -
暂时没有,只是一个空字符串。当我让
currentstring指向 NULL 时,它会出现段错误。 -
那是修辞。你是对的,它指向nothing。随机记忆。你认为当你修改随机存储器时会发生什么?你认为它会指向哪里,这样你就可以随意写信给它?
-
哦,对了,我忘了。文本中的每一行都有不同的长度并且没有长度限制,这就是我没有使用malloc的原因。我想我可以阅读该行,获取长度然后分配,但是这个项目列表将读取大约 20000 个项目,所以我不确定这是否是一件好事。
标签: c string segmentation-fault variable-assignment