C++中const char与wchar类型不兼容问题求助(CSGO脚本开发)
修复C++中char与wchar_t类型不兼容的问题
你的问题核心是窄字符(char)与宽字符(wchar_t)类型不匹配,strcmp仅支持窄字符比较,而entry.szExeFile是宽字符数组,直接调用会导致类型错误。以下是三种直接可用的修复方案:
方案1:统一使用宽字符常量与宽字符比较函数
直接将processName定义为宽字符常量,使用wcscmp(宽字符版strcmp)进行比较:
const wchar_t* processName = L"csgo.exe"; // 前缀L表示宽字符常量 if (!wcscmp(processName, entry.szExeFile)) { // 进程匹配后的逻辑 }
方案2:将窄字符转换为宽字符后比较
如果需要保留processName的窄字符类型,用MultiByteToWideChar完成转换:
const char* processName = "csgo.exe"; wchar_t wProcessName[MAX_PATH]; // 将UTF-8编码的窄字符转为宽字符 MultiByteToWideChar(CP_UTF8, 0, processName, -1, wProcessName, MAX_PATH); if (!wcscmp(wProcessName, entry.szExeFile)) { // 进程匹配后的逻辑 }
方案3:将宽字符转换为窄字符后比较
把entry.szExeFile的宽字符转为窄字符,再用原有的strcmp比较:
const char* processName = "csgo.exe"; char exeFileName[MAX_PATH]; // 将宽字符转为UTF-8编码的窄字符 WideCharToMultiByte(CP_UTF8, 0, entry.szExeFile, -1, exeFileName, MAX_PATH, NULL, NULL); if (!strcmp(processName, exeFileName)) { // 进程匹配后的逻辑 }
注意事项
- 如果你的项目是Visual Studio环境,默认使用Unicode字符集,此时
PROCESSENTRY32的szExeFile就是wchar_t类型,优先选择方案1或2更符合项目编码规范。 - 转换时指定
CP_UTF8可以避免中文等非ASCII字符出现乱码问题。
内容的提问来源于stack exchange,提问作者MrKotopoulos
相关产品推荐
相关产品推荐

