win32 API字符串类型 - LPSTR和char *之间的转换

时间:2012-05-29 18:28:27

标签: c winapi

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

1 个答案:

答案 0 :(得分:1)

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

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

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