現在寫了一個關於管道的程序,發現一個錯誤
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的倍數貌似沒有關係。
不知道爲什麼~~~