为什么我不能在MessageBox上显示这个字符串?

时间:2014-08-19 10:46:55

标签: c++ windows printf messagebox

我已经创建了一个指向几个字符的指针但是在将它分配给某个值然后尝试在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:&#39; MessageBoxW&#39; :无法从&#39; char [100]&#39;转换参数2到LPCWSTR&#39;           指向的类型是无关的;转换需要reinterpret_cast,C风格的转换或函数式转换

3 个答案:

答案 0 :(得分:3)

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

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

您的代码的一个修复方法是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);

答案 1 :(得分: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版本

答案 2 :(得分:1)

对于MessageBox的第二个参数,您使用char s,而对于第三个参数,您使用wchar_t s。这是错的。如果您不是为UNICODE构建,请从L移除L"User-id",使其成为char数组。