我正在编写一个使用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的新手,在理解使用的各种类型时遇到很多麻烦,所以我很感激任何解决这个问题的帮助
答案 0 :(得分:1)
您正在返回指向filename
的指针,该指针已在getFilename
内的堆栈上分配,因此在函数返回时将被释放。
编辑:为避免混淆 - 内存分配在堆栈上,而不是堆上(通过malloc
或new
)。所以“它被释放”并不是指调用free
(或delete
)。而不是它不再保留的事实。不再可用。释放。没有字节。这是一个非缓冲区。
对于解决方案,请考虑在getFileName
之外分配内存。这可以由调用者在堆栈上完成,调用者将缓冲区作为参数传递。当然,使用字符串类是一种选择。