【C语言】C语言兑现文件内容的复制

【C语言】C语言实现文件内容的复制

需求: fgetc   fputc练习

/program文件下面存在一个文件 文件名为:addoverflowDemo.c 现在需要在该目录下复制一个相同的文件,文件名为test:

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{

FILE * sourcefile;
FILE * desfile;
char c;
sourcefile = fopen("/program/addoverflowDemo.c","r");
desfile = fopen("/program/test","w");
while((c = fgetc(sourcefile)) != EOF)
{
        fputc(fgetc(sourcefile),desfile);
}

fclose(sourcefile);
fclose(desfile);

return EXIT_SUCCESS;
}



编译运行,结果如下:

[root@localhost program]# cat test
icue<ti.>#nld sdi.>
n an){ca u;itoeao1=47;/47  0101| 0011 eaeia 30 sm=oeao1
/iuto  u  0101;cttehge is1
/iuto  u  0011;cttelwrbt:Apit(sm=%\"sm;

这是吗?完全和预想的不一样,什么原因呢?

仔细分析程序运行结果:输出的时候好像都是隔了一个字符,

于是回过头去看源代码

while((c = fgetc(sourcefile)) != EOF)
{
        fputc(fgetc(sourcefile),desfile);
}
可能是这里 fgetc每次都运行了两次,使得文件指针,每次都多移动了一位。

修改代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{

FILE * sourcefile;
FILE * desfile;
char c;
sourcefile = fopen("/program/addoverflowDemo.c","r");
desfile = fopen("/program/test","w");
while((c = fgetc(sourcefile)) != EOF)
{
        fputc(c,desfile);
}

fclose(sourcefile);
fclose(desfile);

return EXIT_SUCCESS;
}

这是就OK了。

这时我注意到了,在我第二次向文件test中输出的时候,test文件里面的原有值,那么,如何追加呢?

答:权限部分使用参数“a+”,即打开test文件的时候,将打开的权限设为 “a+”

desfile = fopen("/program/test","a+");


OK!

敲定。