将 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中使用;它将编译为对strstrwcsstr 的正确调用。

【讨论】:

两个操作数必须是相同的类型,所以他必须用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*

C++CString转换为const char *类型

如何在 C++ 中将 Cstring 转换为 TCHAR*?

是否可以*安全地*从函数中返回 TCHAR*?

无法将当前进程 ID 转换为子进程 ID

【100分求解】 “char *”转换为“TCHAR * (提供所有代码 帮整理下 谢谢了 高手)