免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6527 | 回复: 8
打印 上一主题 下一主题

[C++] 请教一个c++读取文件的问题,急 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-25 16:54 |显示全部楼层 |倒序浏览
在c++里
memset( buff , 0x00 , sizeof( buff ) ) ;
fp = fopen( "filename" , "r" ) ;
fread( buff , 1000 , 1 , fp ) ;
buff[strlen(buff)] = '\0' ;
log( buff ) ;(把buff printf出来)结果buff后面有乱码,怎么解决?
buff里面有很多行,包括换行符号的
unix下c没有问题

论坛徽章:
0
2 [报告]
发表于 2004-04-25 17:46 |显示全部楼层

请教一个c++读取文件的问题,急

不好意思,实际程序里是
iBufflen = strlen( caBuff ) ;
caBuff[iBufflen] = '\0' ;

而且好象后面多出的字节刚好是文件的行数
比如有10行,就多出10 个乱字节
但是不是出现在没一行后面,而是在全部打出之后

论坛徽章:
0
3 [报告]
发表于 2004-04-25 19:31 |显示全部楼层

请教一个c++读取文件的问题,急

cabuff 就是fread( "filename" , "r" l里面的buff

没有超过1000字符
而且buff[strlen(buff)] = '\0' 实际上是没有用到的,上面说到过
至于fread( buff , 1 , 1000-1 , fp ); 和fread( buff , 1000 , 1 , fp ) ;只是返回的items的问题,我以前试过,没有多大区别
请问1000的限制是什么原因?我现在已经很迷惘,以前都是在unix下写程序

论坛徽章:
0
4 [报告]
发表于 2004-04-25 19:35 |显示全部楼层

请教一个c++读取文件的问题,急

上面写错了
是fread( buff , 1, 1000,fp)里的buff就是caBuff

论坛徽章:
0
5 [报告]
发表于 2004-04-25 20:00 |显示全部楼层

请教一个c++读取文件的问题,急

原文件:588字节
3001        1234        00001        001        1105081101101000004927        5.99        435                        00       
3001        1235        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00

fread日志打出598字节
3001        1234        00001        001        1105081101101000004927        5.99        435                        00       
3001        1235        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00       
3001        1236        00001        001        1105081101101000004927        5.99        435                        00        屯屯屯屯?

论坛徽章:
0
6 [报告]
发表于 2004-04-25 21:00 |显示全部楼层

请教一个c++读取文件的问题,急

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
我也试过你那种方式,比如n = fread( buff , 400 , 1 , fp ) ; 正确返回值n=0;在unix下编译运行,如果是fread( buff , 1 , 400, fp ) 则正确返回为所读出的长度,函数在两个系统应该没有区别,我看了msdn

开始的buff,我是动态产生的,根据文件的长度申请内存+1,应该是没有问题的
谢谢你的回答,我刚才又试了一下,还是一样,不知道是不是别的原因

论坛徽章:
0
7 [报告]
发表于 2004-04-26 12:55 |显示全部楼层

请教一个c++读取文件的问题,急

一样的结果

现在我把它换成fgets,多取几次算了,至少结果是正确的

论坛徽章:
0
8 [报告]
发表于 2004-04-26 13:53 |显示全部楼层

请教一个c++读取文件的问题,急

不好意思,有些没有说清楚,当时写出来是有点忙,本来是:
先取到文件长度lFilelen ,
buff = ( char *)malloc( lFilelen + 1 ) ; 之后的判断就不写了
memset( buff , 0x00 , lFilelen + 1 ) ;
然后再使用buff

多谢各位大侠关照,不胜感激

论坛徽章:
0
9 [报告]
发表于 2004-04-27 18:28 |显示全部楼层

请教一个c++读取文件的问题,急

对!就是这个原因,我后来发现每一行后面有0D 0A两个字节,也就是楼上说的'\r','\n'。于是又改回用实际长度去读取,居然可以,虽然交差通过不过仍然不是很理解,怀疑原文件有问题。
现在听楼上一说,才明白其中原因,楼上严谨的态度让我佩服,再次谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP