读文件到缓冲区,缓冲区遇到的奇怪问题

zxwl 2006-05-18 10:16:02
//程序片断如下
//BUFF_SIZE是预定义好的1024*8(8k),文件很大
//缓冲区的定义稍靠前一些,那么读出来的内容最后就会有几个字节的乱码
//而放在下面的位置声明,声明后马上使用,就不会有乱码...
//好奇怪啊,不知道大家有没有遇到过,这是什么原因那?

//char cp[BUFF_SIZE]; //在这里声明就会出乱码!!!
string last;
time_t timep;
time(&timep);
cout << "begin:" << asctime(gmtime(&timep)) << endl;

if( (fpin = fopen(in_file.c_str(), "rb")) ==NULL )
{
cout << "error open read[" << in_file << "]" << endl;
exit(0);
}

char cp[BUFF_SIZE]; //在这里声明就不会出乱码!!!
memset( cp,0x00,sizeof(cp) );
int readLen = fread(cp, 1, BUFF_SIZE, fpin);
line_counter = 0;
while(readLen == BUFF_SIZE)
{
//其他操作了......
...全文
242 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxwl 2006-05-22
  • 打赏
  • 举报
回复
结帖了,谢谢各位朋友~
code_tin 2006-05-19
  • 打赏
  • 举报
回复
呵呵。堆问题向来会导致BUG的位置漂移。。。
zxwl 2006-05-19
  • 打赏
  • 举报
回复
哦,不是溢出的问题
应该是,缺少字符串结束标志
zxwl 2006-05-19
  • 打赏
  • 举报
回复
问题找到了...

char cp[BUFF_SIZE];

int readLen = fread(cp, 1, BUFF_SIZE, fpin);

这两行就是问题!!!
应该改成:
char cp[BUFF_SIZE+1];
否则,有缓冲区溢出的可能,使程序不稳定,时而正常,时而奇怪......
kobefly 2006-05-18
  • 打赏
  • 举报
回复
不晓得

不过你可以说一下你的环境

看大家能不能重现你的问题

memset. 理论上不会出问题的啊
herman~~ 2006-05-18
  • 打赏
  • 举报
回复
感觉不大可能
zxwl 2006-05-18
  • 打赏
  • 举报
回复
呵呵,所以感觉很奇怪~~~
仅仅改了一下声明的位置,就不会出乱码
memset的位置没有动
逸学堂 2006-05-18
  • 打赏
  • 举报
回复
用unsign char试一试,
不过确实很奇怪,最好在其他编译器下测试一下。
说不定真是编译器bug,不过感觉不太可能
code_tin 2006-05-18
  • 打赏
  • 举报
回复
只能说理论上不太可能
如果memset( cp,0x00,sizeof(cp) );真的作了的话
zxwl 2006-05-18
  • 打赏
  • 举报
回复
不知道大家有没有遇到过类似的问题
以前也听说过,今天碰到了......
很奇怪的

64,642

社区成员

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

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