c++ - strcmp 错误 'WCHAR [260]' 到 'const char *'

标签 c++

<分区>

我在 Release模式下编译这段代码时遇到了问题(它在 Debug模式下工作得很好)

#include "MemoryManagement.h"
#include "Windows.h"
#include "Colors.h"
#include <iostream>
#include <TlHelp32.h>
using namespace std;

MemoryManagement::MemoryManagement()
{
    handle = NULL;
}

MemoryManagement::~MemoryManagement()
{
    CloseHandle(handle);
}

DWORD MemoryManagement::getProcess(const char* proc)
{
    HANDLE hProcessId = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    DWORD process = 0;
    PROCESSENTRY32 pEntry;
    pEntry.dwSize = sizeof(pEntry);

    SetConsoleColor(colors::blue_bright);
    cout << "Searching game..." << endl;

    while (!process)
    {
        do {
            if (!strcmp(pEntry.szExeFile, proc))
            {
                process = pEntry.th32ProcessID;
                CloseHandle(hProcessId);
                handle = OpenProcess(PROCESS_ALL_ACCESS, false, process);
            }
        } while (Process32Next(hProcessId, &pEntry));
    }

    SetConsoleColor(colors::green_bright);
    cout << "Game found!" << endl << endl;

    return process;
}

uintptr_t MemoryManagement::getModule(DWORD procId, const char* modName)
{
    HANDLE hModule = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);
    MODULEENTRY32 mEntry;
    mEntry.dwSize = sizeof(mEntry);

    do
    {
        if (!strcmp(mEntry.szModule, modName))
        {
            CloseHandle(hModule);
            return (DWORD)mEntry.hModule;
        }
    } while (Module32Next(hModule, &mEntry));
    return 0;
}

DWORD MemoryManagement::getAddress(DWORD addr, std::vector<DWORD> vect)
{
    for (unsigned int i = 0; i < vect.size(); i++)
    {
        ReadProcessMemory(handle, (BYTE*)addr, &addr, sizeof(addr), 0);
        addr += vect[i];
    }
    return addr;
}

错误输出是这样的:

1>c:\users\kuhi\source\repos\cs\cs\memorymanagement.cpp(31): error C2664: 'int strcmp(const char *,const char *)': cannot convert argument 1 from 'WCHAR [260]' to 'const char *'
1>c:\users\kuhi\source\repos\cs\cs\memorymanagement.cpp(31): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\users\kuhi\source\repos\cs\cs\memorymanagement.cpp(54): error C2664: 'int strcmp(const char *,const char *)': cannot convert argument 1 from 'WCHAR [256]' to 'const char *'
1>c:\users\kuhi\source\repos\cs\cs\memorymanagement.cpp(54): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>Done building project "CS.vcxproj" -- FAILED.

我发现问题出在 strcmp 上,我提供了错误的数据类型...

我四处搜索,没有找到符合我的情况的修复...

为什么在Debug模式下工作,而在Release模式下不工作?

我每次打开程序时都必须比较 2 个可能会更改的字符串,所以我不知道如何将参数作为常量给出

最佳答案

在 Debug模式下工作没有意义;那一定是一个错误的观察。

WCHARwchar_t(或 unsigned short 如果需要的话)的 Microsoft 别名 (ref)。

你有一系列这些东西。

所述数组永远不会与const char* 兼容,因为wchar_tchar 是两个不同的事物。因此,您不能将数组传递给需要 const char* 的函数,例如 strcmp

C(以及 C++)还提供了一个宽字符版本的 strcmp,您可以使用它:wcscmp .

关于c++ - strcmp 错误 'WCHAR [260]' 到 'const char *',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57746857/

相关文章:

c++ - dummy() 函数 - 那应该是什么?

c++ vector 的最小值大于另一个值

c++ - vswprintf 崩溃

C++ 模板函数。错误 C2440 : 'return' : cannot convert from '_FwdIt1' to '_FwdIt1'

c++ - 使用命名空间时出错 - 类未声明

c++ - C++:使用waitpid时等待子进程终止

c++ - 提升序列化性能 : text vs. 二进制格式

c++ - 如何通过 C 或 C++ API 获取 HDF5 数据集的名称?

c++ - 解锁互斥体的顺序在这里有区别吗?

c++ - Raspberry Pi 优化的 backtrace()