在 fscanf 之前初始化空指针
Initializing a null pointer before fscanf
所以我必须编写这个程序,将一个巨大的 .txt 文件读取到 AVL 中,为此,我需要读取文本文档中的所有格式化数据并将其放入 AVL 中。但是,每当我尝试在我的代码中初始化 AVL(一个 NULL 指针)时,一旦它到达我用来从 .txt 文件中收集字符串的 fscanf 函数,它就会破坏代码。我在这里做了这个演示,我想我已经非常接近问题的根源了。我将其缩小到与在 fscanf 函数之前用 NULL 值初始化指针有关。但是我该如何解决这个问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE * filePointer = fopen("_lexico_shuf.txt", "r");
if(!filePointer) {
printf("can't open the file");
exit(101);
}
char *lexiconWord;
float polarity;
int *a = NULL;
printf("before while");
while (!feof(filePointer)) {
fscanf(filePointer, "%[^;];%f\n", lexiconWord, &polarity);
printf("| (%s) (%.1f) |", lexiconWord, polarity);
}
printf("after while");
}
所以屏幕上唯一打印的是“之前”printf,而不是“之后”。和程序returns一个随机数。
lexiconWord
尚未设置为指向任何地方,因此 fscanf
正在使用无效的指针值尝试写入。
将此变量更改为数组,并使用 fscanf
中的字段宽度,你不会溢出缓冲区,并检查 fscanf
的 return 值。
char lexiconWord[100];
...
int rval = fscanf(filePointer, "%99[^;];%f\n", lexiconWord, &polarity);
if (rval != 2) {
printf("not all values read\n");
exit(1);
}
另请参阅 Why is “while ( !feof (file) )” always wrong?
所以我必须编写这个程序,将一个巨大的 .txt 文件读取到 AVL 中,为此,我需要读取文本文档中的所有格式化数据并将其放入 AVL 中。但是,每当我尝试在我的代码中初始化 AVL(一个 NULL 指针)时,一旦它到达我用来从 .txt 文件中收集字符串的 fscanf 函数,它就会破坏代码。我在这里做了这个演示,我想我已经非常接近问题的根源了。我将其缩小到与在 fscanf 函数之前用 NULL 值初始化指针有关。但是我该如何解决这个问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE * filePointer = fopen("_lexico_shuf.txt", "r");
if(!filePointer) {
printf("can't open the file");
exit(101);
}
char *lexiconWord;
float polarity;
int *a = NULL;
printf("before while");
while (!feof(filePointer)) {
fscanf(filePointer, "%[^;];%f\n", lexiconWord, &polarity);
printf("| (%s) (%.1f) |", lexiconWord, polarity);
}
printf("after while");
}
所以屏幕上唯一打印的是“之前”printf,而不是“之后”。和程序returns一个随机数。
lexiconWord
尚未设置为指向任何地方,因此 fscanf
正在使用无效的指针值尝试写入。
将此变量更改为数组,并使用 fscanf
中的字段宽度,你不会溢出缓冲区,并检查 fscanf
的 return 值。
char lexiconWord[100];
...
int rval = fscanf(filePointer, "%99[^;];%f\n", lexiconWord, &polarity);
if (rval != 2) {
printf("not all values read\n");
exit(1);
}
另请参阅 Why is “while ( !feof (file) )” always wrong?