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

Posted

技术标签:

【中文标题】c ++打印缓冲区(整数到字符串)【英文标题】:c++ print buffer (integer to string) 【发布时间】:2012-05-21 05:53:36 【问题描述】:

代码:

#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(buffer); 我试图制作字符串,但也不起作用。

字符串测试;

【问题讨论】:

【参考方案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());

【讨论】:

要独立于字符宽度,您可以将_tprintfTEXT 宏一起使用。见MSDN documentation。顺便说一句,无论您是否使用_UNICODE,此答案中的所有示例都应该有效。

以上是关于c ++打印缓冲区(整数到字符串)的主要内容,如果未能解决你的问题,请参考以下文章

六周第二次课

我可以将标准输出重定向到某种字符串缓冲区吗?

在 C 中连接字符串:函数调用后字符串缓冲区没有被清除

Sed 实记 · laoless‘s Blog

如何知道我的下一次调用printf()是否会超过屏幕大小?

Linux文件的I/O操作