gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:56:58 24 4
gpt4 key购买 nike

我正在编写一个使用 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 的新手,在理解所使用的各种类型方面遇到了很多困难,因此如果您能帮助我解决此问题,我将不胜感激

最佳答案

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

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

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

关于c - win32 API 字符串类型 - LPSTR 和 char * 之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10804656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com