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

How to scan string from file and store it on an array of strings (two-dimensional array)?

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

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

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