我希望在控制台和/或文件中写入当前窗口标题,而我在LPWSTR
到char *
或const char *
时遇到问题。我的代码是:
LPWSTR title = new WCHAR();
HWND handle = GetForegroundWindow();
GetWindowText(handle, title, GetWindowTextLength( handle )+1);
/*Problem is here */
char * CSTitle ???<??? title
std::cout << CSTitle;
FILE *file;
file=fopen("file.txt","a+");
fputs(CSTitle,file);
fclose(file);
答案 0 :(得分:4)
您只为一个字符分配足够的内存,而不是整个字符串。调用GetWindowText
时,它会复制比存储器更多的字符,从而导致未定义的行为。您可以使用std::string
确保有足够的可用内存,并避免自行管理内存。
#include <string>
HWND handle = GetForegroundWindow();
int bufsize = GetWindowTextLength(handle);
std::basic_string<TCHAR> title(bufsize, 0);
GetWindowText(handle, &title[0], bufsize + 1);
答案 1 :(得分:2)
您需要分配足够的内存来存储标题:
HWND handle = GetForegroundWindow();
int bufsize = GetWindowTextLength(handle) + 1;
LPWSTR title = new WCHAR[bufsize];
GetWindowText(handle, title, bufsize);