You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:24:29