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

一个文件小迷糊
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); 输出接受的刺……