我正在从文件中扫描字符串,并将其存储到字符串数组中。当我编译程序时,它不会产生任何错误,但是在运行程序时,它显示为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]);
答案 0 :(得分: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);
}