它有什么问题呢?
#include <stdio.h>
#include <string.h>
#define SIZE 19
void filePrint(char fileName[]);
int main (void)
{
char fileRead[SIZE];
filePrint(fileRead);
return 0;
}
void filePrint(char fileName[])
{
FILE *inp;
int input_status = 0;
char readFile[SIZE];
inp = fopen(fileName, "r");
printf("\nEnter a file to print:\n");
input_status = fscanf(inp, "%s", readFile);
while (input_status != EOF)
{
printf("%s\n", readFile);
input_status = fscanf(inp, "%s", readFile);
}
fclose(inp);
}
答案 0 :(得分:7)
我认为你应该回过头来阅读关于File I/O的一章。
贯穿你在脑海中写下的代码,然后大声说出来。
您正在尝试打开存储在fileName字符串中的文件,但该字符串尚未初始化为任何有效的文件(对于fopen)。如果fopen无法打开文件,则返回NULL指针。您无法使用此NULL指针进行读取。 此外,如果您使用fscanf从刚刚打开的文件中读取,则用户无法输入任何内容。
答案 1 :(得分:3)
除此之外,您实际上从未指定要从中读取的文件?
答案 2 :(得分:2)
当您致电fopen(fileName, "r");
时,fileName
尚未填充文件名。这是一个未初始化的阵列。
答案 3 :(得分:1)
看起来你在把它送到filePrint()之前从未把任何东西放到main中的fileRead []中,这给了fopen()。即,“未初始化的数据”
答案 4 :(得分:1)
如果您在fileRead []数组中也提到了文件名,则会出现分段错误。 因为您指定的数组大小为19.您应该在fileRead []数组中指定大数组大小,如1024.
答案 5 :(得分:1)
您应该提供该功能的文件名。
您传递没有值的字符数组。所以那个时候,数组的值为null。在fopen函数中,您尝试打开该文件。
因此fopen函数返回null值。如果fopen函数成功打开文件,它将返回正确的文件指针。否则它将返回null,错误将存储在errno中。
使用空指针无法读取。