这个问题已经在这里有一个答案:
我从文件扫描字符串,并将其存储到一个字符串数组。当我编译我的程序,也不会产生任何错误,但是当我运行它,它说Segmentation fault (core dumped)
。我知道错误在声明的fscanf,但我无法弄清楚什么是错的。
我的代码如下所示:
FILE *stringsIn = fopen("strings.txt", "rt");
char *strings[INPUT_STRINGS];
for (int i = 0; i < INPUT_STRINGS; i++)
fscanf(stringsIn, "%s ", &strings[i][0]);
你有一个指针数组,但你没有为每个字符串分配空间。在这种情况下你可以做的是预先分配一个足够大的缓冲或者在预先分配的缓存读取,看看有多少个字符被读取并分配该大小的字符串。
FILE *stringsIn = fopen("strings.txt", "rt");
char *strings[INPUT_STRINGS];
for (int i = 0; i < INPUT_STRINGS; i++) {
strings[i] = (char*)malloc(2048); //allocate a big enough buffer
fscanf(stringsIn, "%2047s ", &strings[i][0]);
}
第二个版本是这样的:
FILE *stringsIn = fopen("strings.txt", "rt");
char *strings[INPUT_STRINGS];
char temp[2048];
for (int i = 0; i < INPUT_STRINGS; i++) {
fscanf(stringsIn, "%2047s ", &temp);
size_t len = strlen(temp);
strings[i] = (char*)malloc(len + 1);
strncpy(strings[i], temp, len);
}