如何在c++控制台程序把这种字符串用ReadProcessMemory读取并用printf打印出来

如何在c++控制台程序把这种字符串用ReadProcessMemory读取并用printf打印出来

img


#include <locale.h>
#include <windows.h>

int main(){
    setlocale(LC_ALL, "chs");
    DWORD pid = 0; // 改成读取进程的PID
    void* addr = (void*)0x400000; // 改成读取进程的内存地址

    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    if( hProcess ){
        wchar_t buf[4096] = {0};
        DWORD r = 0;
        if (ReadProcessMemory(hProcess, addr, buf, 4096*sizeof(wchar_t), &r)){
            printf("%S\n", buf);
        }else{
            printf("读取进程失败\n");
        }

      CloseHandle(hProcess);
    }else{
        printf("打开进程失败\n");
    }
    
    return 0;
}

参考如下,有帮助的话采纳一下哦!

#include <iostream>
#include <locale>  // 需要包含此头文件

int main() {
    // 设置标准输出流的本地化类型
    std::locale::global(std::locale("")); 

    // 定义长度为12的Unicode字符串
    wchar_t str[12] = L"你好,世界!";

    // 打印Unicode字符串
    wprintf(L"%ls\n", str);

    return 0;
}

使用std::locale::global()函数来设置标准输出流的本地化类型,以便正确地打印Unicode字符串。然后,我们定义一个长度为12的Unicode字符串str,并使用wprintf()函数打印它。
wprintf()函数中使用的格式化字符串是%ls,而不是%s。这是因为在Unicode编码中,每个字符占用两个字节,所以我们需要使用%ls来正确地打印Unicode字符串。

在c++中直接利用printf("%s",s) 是不允许的,因此c++中提供了一个函数c_str()对字符串进行转换,接着再利用%s 输出。
提供参考实例:https://blog.csdn.net/cxy341328/article/details/81905357?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-11-81905357-blog-127596435.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-11-81905357-blog-127596435.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=17

该回答内容部分引用GPT,GPT_Pro更好的解决问题
要使用C++控制台程序把字符串读取并用printf打印出来,首先可以使用C++中的string类,它可以将字符串转换为字符串对象。然后使用cin来读取字符串,再将字符串转换为char数组,最后使用printf函数来打印出来。

以下是实现的代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;  //定义一个string对象s来存储字符串
cin >> s;  //读取字符串
char a[s.length()];  //定义一个char数组a,数组的长度由字符串的长度决定
strcpy(a, s.c_str());  //将字符串s转换为char数组a
printf("%s", a);  //使用printf函数打印出字符数组a中的内容
return 0;
}

如果回答有帮助,望采纳。