为什么在 C 中将文本从一个文件复制到另一个文件后,文件中会有额外的空格?

Why are there extra spaces in the file after copying text from one file to another in C?

char c, cp;

FILE *input_file, *output_file;

input_file = fopen("d:\input.txt","r");
output_file = fopen("d:\output.txt", "w");

if(input_file==NULL){
    printf("cannot open the input.txt file.");
    exit(0);
}

if(output_file == NULL){
    printf("cannot open the output.txt file.");
    exit(0);
}

cp = fgetc(input_file);
while(cp!=EOF){
    fputc(cp,output_file);
    cp=fgetc(input_file);
}

c = fgetc(output_file);
while(c!=EOF){
    printf("%c",c);
    c=fgetc(output_file);
}

fclose(input_file);
fclose(output_file);
getch();

这是我在复制文本文件时使用的代码。 在 input.txt 文件中我写了 "Hello how are you".

执行代码后,文本"Hello how are you"被复制到output.txt文件 但是复制的文本后面有一百多个空格。 在程序下面的代码不工作之后:

cp = fgetc(input_file);
while(cp!=EOF){
    fputc(cp,output_file);
    cp=fgetc(input_file);
}

上述代码下方的代码无效。 怎么了?请详细说明。我是C的初学者

您必须将 ccp 定义为 int 而不是 char。 EOF 被定义为一个整数值,它可以与任何字符区分开来,例如由 fgetc() 读取,其中 returns 是无符号字符范围或 EOF 中的值,不一定是字符范围中的值。 (感谢@chux)。

所以如果 cp 是一个字符,while( cp != EOF ) 可能不会变为真。

关于第二期:如果你想阅读你写的东西,你必须

  1. 打开 output.tx 模式 "w+"。 "w" 只允许写入,"w+" 也允许读取,但是像 "w" 一样,如果文件不存在则创建文件,如果存在则截断文件。有关更多选项和详细信息,请参阅 man page
  2. 读写之间调用rewind(output_file)fseek(output_file, 0, SEEK_SET)

您必须关闭输出文件才能提交更改并能够再次读取:

cp = fgetc(input_file);
while(cp!=EOF){
    fputc(cp,output_file);
    cp=fgetc(input_file);
}

fclose(output_file);
// .....        
c = fgetc(output_file);