注意下面代码所产生的问题。
这一段是读文件,没有什么问题。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
char *p = "I:\\文件字符读写\\1.txt";
FILE *pr = fopen(p,"r");
if (pr == NULL)
{
return;
}
while (!feof(pr))
{
char ch = fgetc(pr);
putchar(ch);
}
system("pause");
}
下面这段代码就有问题了,下面是一段复制文件的代码,查看文件也是没有问题的,但是从属性里可以看到,复制后的文件比原文件大了一个字节。这是由于下面这段代码引起的:
while (!feof(pr))
{
char ch = fgetc(pr);<span> </span>// 问题就出在这儿,当 fgetc(pr)读到最后 EOF 时,这时的ch =EOF ,而下面的代码:fputc(ch);把这个字字符写进了文件,所<span style="white-space:pre"> </span>// 以多了一个字节
fputc(ch, pw);
}
void main()
{
char *namer = "I:\\文件字符读写\\1.txt";
char *namew = "I:\\文件字符读写\\w.txt";
FILE *pr = fopen(namer, "r");
FILE *pw = fopen(namew, "w");
if (pr == NULL)
{
return;
}
while (!feof(pr))
{
char ch = fgetc(pr);<span style="white-space:pre"> </span>//问题就出在这儿,多写了个EOF。
fputc(ch, pw);
}
fclose(pw);
fclose(pr);
system(namew);
system("pause");
}
上面的代码复制文件时会多个字节,如果在使用复制后文件再进行复制又会多个字节,反复这样使用就会使用文件变大。所以注意代码的细节。
可以改成这样:
<span style="white-space:pre"> </span>char ch;
while ((ch = fgetc(pfr)) != EOF)
{
fputc(ch, pfw);
}
当读到 EOF,即文件末尾时结束文件复制。