c ++打印缓冲区(整数到字符串)

时间:2012-05-21 05:53:37

标签: c++ buffer

代码:

#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <iomanip>
#include <locale>
#include <sstream>
#include <string>
int main()
{
    HWND handle = FindWindow(0 ,TEXT("window name"));
    if(handle == 0)
    {
             MessageBox(0,TEXT("Failed to find window"),TEXT("Return"),MB_OK);
    }
    else
    {
    DWORD ID;
    GetWindowThreadProcessId(handle,&ID);
    HANDLE hProcess = OpenProcess(PROCESS_VM_WRITE|PROCESS_VM_OPERATION , FALSE, ID);
    hProcess = OpenProcess(PROCESS_VM_READ , FALSE, ID);

    if(!hProcess)
    {
        Beep(1000,1000);
    }else {

          int buffer;
        if (ReadProcessMemory(hProcess,(void *)0x00963FC4,&buffer,4,NULL))  
        {
             printf(buffer);
        }
        else  {
            MessageBox(0,TEXT("Could not Read"),TEXT("Return"),MB_OK);
              }

        }CloseHandle(hProcess);
    }

}


我试图让这个程序读取内存地址,
但我得到了这个错误:
IntelliSense:类型“int”的参数与“const char *”类型的参数不兼容
我试过printf(缓冲区);
我试图制作字符串,也不起作用。

  

字符串测试;

1 个答案:

答案 0 :(得分:1)

首先,尝试使用格式字符串正确的printf()调用:

printf("%d", buffer);

C是一种静态类型语言,你不能用printf()做类似python的东西来输出你想要的东西。 printf()函数总是只打印第一个“const char *”参数,允许根据规则替换此字符串中的某些值。

其次,我在代码中看到了TEXT()宏,因此您可能在项目设置中使用了Unicode字符串。如果是这样(你应该在VC ++中得到链接错误2019/2005),你必须使用wprintf()函数:

wprintf(L"%d", buffer);

要打印std :: string对象,还必须将其转换为“const char *”。这是通过string :: c_str()调用完成的:

std::string MyString("Test");
printf("Your string is = %s", MyString.c_str());