读书人

一个文件小迷糊,该如何解决

发布时间: 2012-03-23 12:06:21 作者: rapoo

一个文件小迷糊

C/C++ code
#include "stdio.h"void main(){    FILE *f_in,*f_out;    char str[50];    f_out=fopen("C:\\tsu.txt\\","r");    f_in=fopen("C:\\tsu1.txt","w");    while(!feof(f_out))    {      fgets(str,5,f_out);      fputs(str,f_in);         }    fclose(f_out);    fclose(f_in);    printf("The file copy finish!");}

作用是复制tsu.txt到tsu1.txt
书上说:
函数fgets()的作用是从一个文件中读取一个字符串。其调用形式为:fgets(字符数组,字符数,文件型指针变量)
例:fgets(str,n,fp);其作用是从fp指向的文件的当前位置开始读取n-1个字符,并加上字符串结束标志‘\0’一起放入字符数组str中。如果从文件读取字符时遇到换行符或文件结束标志EOF,读取结束。
但是:
我给tsu.txt 文件内容是:asdasdadfsdfsdf\r\nsdfsdfsdffgjtyiwerwersda
运行程序后tsu1.txt 类容也是asdasdadfsdfsdf\r\nsdfsdfsdffgjtyiwerwersda
问题是:
1.遇到\r\n怎么没有结束?
2.怎么读那么多?我的n=5啊,最多读入4个字符啊

[解决办法]
因为
while(!feof(f_out))
自然是循环读到文件尾了……

你自己单步下,或者去掉循环,看看结果
[解决办法]
1.遇到'\r\n'是指遇到0x0d 0x0a不是指遇到0x5c 0x6e 0x5c 0x6e,即
tsu.txt 文件内容应该是:
asdasdadfsdfsdf
sdfsdfsdffgjtyiwerwersda
而不应该是:
asdasdadfsdfsdf\r\nsdfsdfsdffgjtyiwerwersda

2.下次while时fgets将后面4个接着读了呗。


[解决办法]
探讨
引用:
因为
while(!feof(f_out))
自然是循环读到文件尾了……

你自己单步下,或者去掉循环,看看结果


去掉循环 运行就出错了啊,
不过虽说有循环,但是 fgets(str,5,f_out); 获得字符的长度限定了啊。
fputs(str,f_in); 输出接受的刺入,不对吗?

[解决办法]
探讨
引用:
引用:
因为
while(!feof(f_out))
自然是循环读到文件尾了……

你自己单步下,或者去掉循环,看看结果


去掉循环 运行就出错了啊,
不过虽说有循环,但是 fgets(str,5,f_out); 获得字符的长度限定了啊。
fputs(str,f_in); 输出接受的刺……

读书人网 >C语言

热点推荐