我正在尝试制作一个基本的C程序来读取文件,但由于某些原因,当我使用make Test1
运行它然后。/Test1 test1.txt
我得到“错误:'s'可能在此函数中使用未初始化的“。
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char** argv) {
if (argc < 2) {
printf("error\n");
return 0;
}
FILE *fp = fopen(argv[1], "r");
if (fp == NULL) {
printf ("error\n");
return 0;
}
char * s;
int r = fscanf(fp, "%s", s);
while (r != EOF) {
printf("%s\n", s);
r = fscanf(fp, "%s", s);
}
return 0;
}
答案 0 :(得分:1)
问题在于fscanf。它不会分配任何内存,你必须自己做,例如通过做
char *s = malloc(100); //array s is stored in the heap memory
或
char s[100]; //array s is stored in the stack
要确保fscanf不会读取超过100个字符(因为这是我们获得的内存量),您必须编写
int r = fscanf(fp, "%99s", s);
答案 1 :(得分:0)
当你正在读取被设置为NULL的s时,它应该崩溃,这意味着你没有留下来读入的内存,它会导致程序崩溃,具体取决于操作系统依赖于错误
做char s[1000]
至少给它一些记忆来阅读。