【问题标题】:Why can't I display this string on MessageBox? [duplicate]为什么我不能在 MessageBox 上显示此字符串? [复制]
【发布时间】:2014-08-19 10:46:54
【问题描述】:

我创建了一个指向几个字符的指针,但是在将它分配给某个值然后尝试在 MessageBox 上打印它并编译它给我一些错误之后。我的代码如下:

 #include <Windows.h>
 #include <string.h>
 #include <iostream>
 using namespace std;

 void main()
 {

  char buff[100];
  string id = "ST_5";
  sprintf_s(buff, "id: %s", id.c_str());


   MessageBox(NULL, buff,L"User-id", MB_OK);

 }

请帮我找出这段代码中的问题,谢谢。

我的编译器的输出: c:\users\zafri\documents\visual studio 2012\projects\test3\test3\test3.cpp(19):错误 C2664:“MessageBoxW”:无法将参数 2 从“char [100]”转换为“LPCWSTR” 指向的类型是不相关的;转换需要 reinterpret_cast、C-style cast 或 function-style cast

【问题讨论】:

  • “一些错误”?你读过吗?
  • 感谢您对我投反对票@llya
  • @zafri,不是我。但是,由于您向我们展示了您的错误信息,因此帮助您变得更加简单。

标签: c++ windows printf messagebox


【解决方案1】:

您应该阅读编译器错误消息。

MessageBox 的第二个和第三个参数必须具有相同的类型。您可以用两个char * 调用MessageBoxA,或者用两个wchar_t * 调用MessageBoxW

您的代码的一个修复方法是执行MessageBoxA(NULL, buff, "User-id", MB_OK)

您也错误地使用了sprintf_s,请阅读其文档。恕我直言,最好使用标准函数snprintf

snprintf(buff, sizeof buff, "%s", id.c_str());

请注意,您可以完全取消 buff 并编写:

MessageBoxA(NULL, id.c_str(), "User-id", MB_OK);

【讨论】:

  • 感谢马特的帮助 :)
【解决方案2】:

您应该对所有变量、对象和函数使用 wchar_t 类型,此代码有效:

 #include <Windows.h>
 #include <string.h>
 #include <iostream>
 using namespace std;

 int main()
 {

  wchar_t buff[100];
  wstring id = L"ST_5";
  swprintf_s(buff, 100, L"id: %s", id.c_str());
  MessageBoxW(NULL, buff,L"User-id", MB_OK);

 }

函数swprintf_s()是sprintf/snprintf的wchar_t/safe版本

【讨论】:

    【解决方案3】:

    MessageBox 的第二个参数使用chars,而第三个参数使用wchar_ts。这是错误的。如果您构建的不是 UNICODE,请从 L"User-id" 中删除 L,使其变为 char 数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多