现在写了一个关于管道的程序,发现一个错误
void showInfo(char * data)
{
char buf[30]={0};
for(int i=0;i<8;i++){
sprintf(&buf[i*3],"%02x ",data[i]);
}
::MessageBox(NULL,buf,NULL,MB_OK);
}
运行后出错提示:Run-Time Check Failure # 2-Stack around the variable 'buf' was corrupted.之后把30改成32能正常运行。
参照网上的解决方案:
project->配置属性->c/c++->代码生成->基本运行时检查为默认值;
在函数前面加#pragma runtime_checks("sc", off),在函数后面加#pragma runtime_checks("sc", restore);
就都不会报错误,显然这种修改编译选项的方法并不是一个很好的解决方案。
另外有提到vc默认是在8字节对齐的环境下编译链接的,但我试了一下发现buf的大小<=30时都是报错,>30都是可运行的,和大小是否是8的倍数貌似没有关系。
不知道为什么~~~