如何从文件中扫描字符串并将其存储在字符串数组(二维数组)中?

时间:2019-02-06 06:43:29

标签: c arrays file-handling filehandle

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

1 个答案:

答案 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);
}