// 以下是读一个文件的代码
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平台漏洞挖掘!