【问题标题】:why cout output memory address not string? [duplicate]为什么 cout 输出内存地址不是字符串? [复制]
【发布时间】:2020-01-18 22:10:09
【问题描述】:

我想用 c++ 来获取显示设备信息,但是 cout 给了我一些内存地址,我怎样才能得到字符串值?输出如:00CFF4B4:00CFF5F8, 我正在使用 Visual Studio 2019

#include <iostream>
#include <windows.h>

int main()
{
    DISPLAY_DEVICE d;
    d.cb = sizeof(DISPLAY_DEVICE);
    int device_num = 0;

    while (EnumDisplayDevices(NULL, device_num, &d, 0))
    {
        std::cout << d.DeviceName << ":" << d.DeviceID<<std::endl;
        device_num++;
    }
    return 0;

}

【问题讨论】:

  • 您使用的是W 还是A 版本的EnumDisplayDevices
  • @Dai 你是对的,这是根本原因,谢谢

标签: c++ winapi


【解决方案1】:

我假设您使用的是DISPLAY_DEVICE (DISPLAY_DEVICEW) 的 W 版本,我认为这是至少自 Visual Studio 2015 及更高版本 (the compiler defines UNICODE) 以来的默认设置。

DISPLAY_DEVICEWDeviceNameDeviceID 成员是WCHARwchar_t 的宏),因此您需要使用wcout 而不是cout

std::wcout << d.DeviceName << ":" << d.DeviceID << std::endl;

【讨论】:

  • 这个答案是正确的,但我不明白为什么它会这样工作,为什么 Visual Studio 不弹出错误告诉我,只给我一个内存地址?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2020-07-23
相关资源
最近更新 更多