0

我正在编写一个使用 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 的新手,在理解所使用的各种类型时遇到了很多麻烦,所以如果能帮助我解决这个问题,我将不胜感激

4

1 回答 1

1

您正在返回一个指向 的指针filename,该指针已在内部堆栈上分配getFilename,因此在函数返回时被释放。

编辑:为避免混淆 - 内存分配在堆栈上,而不是堆上(通过mallocnew)。所以“它被释放”并不是指调用free(或delete)。而是因为它不再被保留。不再可供使用。解除分配。没有字节。这是一个非缓冲区。

对于解决方案,请考虑在getFileName. 这可以由调用者在堆栈上完成,调用者将缓冲区作为参数传递。自然地,使用字符串类将是一种选择。

于 2012-05-29T18:30:25.340 回答