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