首页 > 解决方案 > 如何从文件中扫描字符串并将其存储在字符串数组(二维数组)中?

问题描述

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

标签: carraysfile-handlingfilehandle

解决方案


你有一个指针数组,但你没有为每个字符串分配空间。在这种情况下,您可以做的是预先分配足够大的缓冲区或在预先分配的缓冲区中读取,查看读取了多少字符并分配该大小的字符串。

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


推荐阅读