我已经创建了一个指向几个字符的指针但是在将它分配给某个值然后尝试在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风格的转换或函数式转换
答案 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
数组。