将 TCHAR 转换为 strstr 函数的 char*
Posted
技术标签:
【中文标题】将 TCHAR 转换为 strstr 函数的 char*【英文标题】:Converting TCHAR to a char* for strstr function 【发布时间】:2014-08-14 15:45:05 【问题描述】: char skype[6] = "Skype";
HWND firstwindow = FindWindowEx(NULL, NULL, NULL, NULL);
HWND window = firstwindow;
TCHAR windowtext[MAX_PATH]; //search term
//We need to get the console title in case we
//accidentally match the search word with it
//instead of the intended target window.
TCHAR consoletitle[MAX_PATH];
GetConsoleTitle(consoletitle, MAX_PATH);
while(true)
//Check window title for a match
GetWindowText(window, windowtext, MAX_PATH);
if (strstr(windowtext, skype)!=NULL && strcmp(windowtext, consoletitle)!=0) break; //search for program
//Get next window
window = FindWindowEx(NULL, window, NULL, NULL);
if(window == NULL || window == firstwindow)
printf("Window not found.\n");
return 1;
//end while
Error: cannot convert 'TCHAR* aka wchar_t*' to 'const char*' for argument '1' to 'char* strstr(const char*, const char*)'
问题出现在这一行:
if (strstr(windowtext, skype)!=NULL && strcmp(windowtext, consoletitle)!=0) break; //search for program
当我在 cygwin mingw32gcc 编译器中运行相同的程序时,我没有遇到问题。这是我使用 QT mingw32gcc 编译器的问题吗?我在一开始就包含了<windows.h>
,所以这不是问题。
编辑:好的,所以我添加了<tchar.h>
并替换了
if (_tcsstr(windowtext, skype)!=NULL && _tcscmp(windowtext, consoletitle)!=0) 中断;
但问题仍然存在:错误:无法将 'TCHAR* aka wchar_t*' 转换为 'const char*' for argument '1' to 'char* strstr(const char*, const char*)'
【问题讨论】:
请先阅读:msdn.microsoft.com/en-ca/library/windows/desktop/… 除非您打算支持 Windows 9x,否则请摆脱 TCHAR 并使用宽字符串与 API 交互。 【参考方案1】:您应该使用TCHAR
-等价物_tcsstr
,而不是转换为char *
以在strstr
中使用;它将编译为对strstr
或wcsstr
的正确调用。
【讨论】:
两个操作数必须是相同的类型,所以他必须用TCHAR skype[] = _T("Skype");
替换char skype[6] = "Skype";
。尽管在当今时代,仅使用 wchar_t
似乎更简单。【参考方案2】:
要在你的代码中使用 unicode,你需要在编译你的代码之前定义 UNICODE
和 _UNICODE
预处理宏,所以在你的编译命令中添加这个命令行参数:
-DUNICODE -D_UNICODE
有关更多信息,您可以阅读以下内容:http://www.cplusplus.com/forum/windows/90069
【讨论】:
以上是关于将 TCHAR 转换为 strstr 函数的 char*的主要内容,如果未能解决你的问题,请参考以下文章
将 std::string 转换为 const tchar*