伙计们,我想从文件中读取文本,并将每个字符分配给数组的单个元素

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]);
}

10-08 15:11