【发布时间】:2012-06-04 00:02:33
【问题描述】:
我正在编写一个使用 win32 API 创建文件的函数
void createFile(HWND hwnd, LPTSTR pszFile, PBITMAPINFO pbi, HBITMAP hBMP, HDC hDC)
我还写了一个根据当前时间动态生成文件名的函数。
char * getFilename() {
char filename[200] = "";
char buf[40];
SYSTEMTIME st;
GetSystemTime(&st);
itoa(st.wHour, buf,10)
strcat(filename,buf);
.....
return filename;
}
我把上面的函数称为:
createFile(hwnd, getFilename, pbi, hBMP, hDC);
通过调试器,文件名是正确的,直到执行 createFile() 中的第一条语句之后,字符串突然变为“ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
很明显我有某种类型的错误,但我不确定如何修复它。我是 win32 API 的新手,在理解所使用的各种类型时遇到了很多麻烦,所以如果能帮助我解决这个问题,我将不胜感激
【问题讨论】:
-
顺便说一句,“ÌÌÌ...”来自试图提供帮助的编译器。在调试版本中,MSVC 在超出范围时会像这样填充堆栈缓冲区,以帮助您找到这样的错误。如果它没有这样做,那么指针有可能仍然指向具有您期望的字符串的内存,并且即使它实际上是一个错误,它似乎也可以工作。