繁体   English   中英

在 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 文件中,我写了“你好,你好吗”。

执行代码后,文本“你好,你好吗”被复制到 output.txt 文件中,但复制的文本后有一百多个空格。 在程序下面的代码不起作用之后:

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

上面代码下面的代码不起作用。 怎么了? 请详细说明。 我是 C 的初学者。

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

因此while( cp != EOF )如果cp是字符,则可能不会变为真。

对于第二个问题:如果你想阅读你写的东西,你必须

  1. 以“w+”模式打开 output.tx。 "w" 只允许写入,"w+" 也允许读取,但就像 "w" 如果文件不存在则创建文件,如果存在则截断它。 有关更多选项和详细信息,请参阅手册页
  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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM