fread读出的文本数据\r和\n的问题

xychzh 2011-03-30 09:45:08
请问用fread读出的文本数据,'\r'的后面是不是一定是'\n'?
...全文
770 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xychzh 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhao4zhong1 的回复:]
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
[/Quote]

恩,弄混了,"r"是没有'\r'的,只有"rb",才有'\r',而'\n'则两者都有。
那看来问题差不多了,

结论:
用ReadFile读出的文本文件数据'\r'后面一定是'\n'
赵4老师 2011-03-30
  • 打赏
  • 举报
回复
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
qq120848369 2011-03-30
  • 打赏
  • 举报
回复
123
\n456
\n789
\n请按任意键继续. . .

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

int main()
{
FILE *fp=fopen("d://test.txt","r");
int ch;

while( (ch=fgetc(fp))!=EOF )
{
fputc(ch,stdout);

if(ch=='\n')
{
printf("\\n");
}

if(ch=='\r')
{
printf("\\r");
}
}

fclose(fp);

return 0;
}

/*
test.txt

123
456
789

*/


看样文件里只有\n的样子,它其实代表了回车+换行。
qq120848369 2011-03-30
  • 打赏
  • 举报
回复
这个得看情况了.

既然你在windows下用fread读数据,说明你非常有信心这个文件是二进制文件,如果你读的是文本文件,趁早使用getline啊,fscanf啊,fgets啊进行读取, 可以避免这些东西. 我稍微测试一下细节,一会告诉你有什么结果.
DX_deepblue 2011-03-30
  • 打赏
  • 举报
回复
我觉得,是一定有
xychzh 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hang1359 的回复:]
看你的文本数据本身是什么系统产生的,'\r' : 0D CR (carriage return) 回车键, '\n' : 0A LF (NL line feed, new line) 换行键
在文本处理中, CR, LF, CR/LF是不同操作系统上使用的换行符.
Dos和windows采用回车+换行CR/LF表示下一行,
而UNIX/Linux采用换行符LF表示下一行,
苹果机(MAC……
[/Quote]

假如用Win32API的ReadFile函数读出的数据,则一行默认一定有'\r'和'\n'是吧?
我就是想知道'\r'后面是不是一定是'\n'?
(我刚刚发现fread读二进制的时候没有'\r'字符,这个不管它,只管'\r'和'\n'都有情况)
metohang 2011-03-30
  • 打赏
  • 举报
回复
看你的文本数据本身是什么系统产生的,'\r' : 0D CR (carriage return) 回车键, '\n' : 0A LF (NL line feed, new line) 换行键
在文本处理中, CR, LF, CR/LF是不同操作系统上使用的换行符.
Dos和windows采用回车+换行CR/LF表示下一行,
而UNIX/Linux采用换行符LF表示下一行,
苹果机(MAC OS系统)则采用回车符CR表示下一行.
CR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D;
LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A.
所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示.
一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件.

65,201

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧