首页
社区
课程
招聘
[求助]VC6跟踪显示时变量无法刷新
发表于: 2011-1-24 10:15 4123

[求助]VC6跟踪显示时变量无法刷新

2011-1-24 10:15
4123
// 以下是读一个文件的代码
        FILE *stream;
        long filesize;
        if ((stream=fopen("c:\\hosts","r"))!=NULL)
        {
                //利用函数求出文件长到filesize
                fseek(stream,0,SEEK_END);
                filesize=ftell(stream);
        fseek(stream,0,SEEK_SET);

                //动态申请内存
                char* buffer=new char[filesize+1];

                fread(buffer,1,filesize+1,stream);
                int i;
                char ss[5];
                int linesum=0;
                for(i=0;i<=filesize;i++)
                   if (buffer[i]==0x0a) linesum=linesum+1;
                itoa(linesum,ss,10);
                MessageBox(ss);
        buffer[filesize-linesum]='\0';
        //buffer[filesize-0]='\0';
                MessageBox(buffer);
                delete buffer;
        }
    else
                MessageBox("打开文件出错","错误",0+64);

      以上是一段极简单的VC小程序,它完成的功能是将C:\hosts文件(一个小的带回车的小文本),一次读出并用messagebox给予显示,这里主要是想动态申请内存,所以,用filesize=ftell(stream)来得到文件的大时,可问题出来了,由于文本里有N多回车,如果计算文件大小,就会多计算出N个回车的空间而造成申请的内存溢出,显示时出现乱码,所以加了一个linesum来查找回车数再减去.
     以上的代码可以成功解除问题,但问题是我在调试的过程中发现了问题,平台用的是VC6,在调试到itoa(linesum,ss,10);MessageBox(ss);这两句前时,明明linesum是17,显示也正确是17,但在VC下面的调试窗口里显示的linesum却是0.请熟用VC6兄弟告诉我,这是VC6的bug,还是我的方法错了,为什么,我该怎么做才能刷新VC6调试时的变量显示。

QQ:86074731

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 1889
活跃值: (198)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
在The See/wx兄弟的指导下,问题解决,是自己的调用出了问题:
    for(i=0;i<=filesize;i++)
       if (buffer[i]==0x0a) linesum=linesum+1;
这一句在VC6里执行会有问题,虽然这里是一个带有;号的for语句,但执行时如果说字符不等0x0a并不会再次执行for循环,而是跑到了下一条语句,在最后的一个;再加一个;,搞定!
     原因是for循环里央如果只有一个if语句时,它会它为是“半条语句”,而出现这个错.
2011-1-24 11:26
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码