伙计们,我想从文件中读取文本,并将每个字符分配给数组的单个元素
char A[1000];
FILE * fpointer;
fpointer=fopen("text.txt","r");
i=0;
while(!feof(fpointer))
{
fscanf(fpointer,"%c",&A[i]);
i=i+1;
}
fclose(fpointer);
for (i=0;i<100;i++)
{
printf("%c",A[i]);
}
return 0;
但是问题是输出是一些奇怪的符号,而不是文件的文本“这只是一个测试”。为什么会这样?
最佳答案
可能的原因包括:fopen
无法打开指定的文件。通过检查fopen
的返回值进行修复。
见Why is “while ( !feof (file) )” always wrong?
您总是打印100个字符,但是如果文件少于100个字符,则会出现问题,因为您将打印数组的未初始化位置,从而导致UB。通过打印从零到i
的所有内容进行修复。
更正的代码段:
int i = 0, j = 0;
char A[1000];
FILE* fpointer;
fpointer = fopen("text.txt", "r");
if(!fpointer)
{
fputs("fopen failed! Exiting...\n", stderr);
exit(-1); /* Requires `stdlib.h` */
}
while(fscanf(fpointer, "%c", &A[i]) != EOF)
{
i = i + 1;
}
fclose(fpointer);
for (j = 0; j < i; j++){
printf("A[%d] = '%c'\n", j, A[j]);
}