为什么我在消息框中收到象形文字文本
Why am I getting hieroglyphic text in message box
我正在使用 C++ 在我的 Win32 桌面应用程序上创建一个按钮,当按下该按钮时,会显示一个消息框,该消息框打印出文本框中的用户输入以及一些附加文本。但是,消息框显示带有象形文字的文本并给出错误 C6054:字符串 'buff' 可能不是零终止的。我不确定为什么文本没有正确显示在消息框中。
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#define ENTER_BUTTON 2345
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR heading[] = _T("CD ROM READER");
TCHAR CSCI_No_Inst[] = _T("Please enter the CSCI No below:");
switch (message)
{
case WM_CREATE:
{
TextBox = CreateWindow(TEXT("EDIT"), TEXT(""),
WS_VISIBLE | WS_CHILD | WS_BORDER,
150, 140, 250, 25,
hWnd, NULL, NULL, NULL);
HWND hwndButton_Enter = CreateWindow(
L"BUTTON", L"ENTER",
WS_VISIBLE | WS_CHILD | WS_BORDER, //Styles
405, 140, 70, 25,
hWnd, (HMENU)ENTER_BUTTON, NULL, NULL);
return 0;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case ENTER_BUTTON:
int gwtstat = 0;
TCHAR title[] = _T("CSCI_NO");
gwtstat = GetWindowText(TextBox, &CSCI_NO[0], 60);
TCHAR buff[100];
TCHAR name[] = _T("CSCI_NO");
_tprintf(buff, L"The CSCI No you entered is: %s", &CSCI_NO[0]);
MessageBox(hWnd, buff, title, MB_OK);
break;
}
}
}
首先需要初始化数组buff
,否则输出时会出现未初始化字符乱码
那么你应该使用swprintf
而不是_tprintf
(wprintf
)将字符串输出到buff
数组
我修改了代码如下,大家可以参考一下:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR heading[] = _T("CD ROM READER");
TCHAR CSCI_No_Inst[] = _T("Please enter the CSCI No below:");
TCHAR CSCI_NO[60] = L"";
switch (message)
{
case WM_CREATE:
{
TextBox = CreateWindow(TEXT("EDIT"), TEXT(""),
WS_VISIBLE | WS_CHILD | WS_BORDER,
150, 140, 250, 25,
hWnd, NULL, NULL, NULL);
HWND hwndButton_Enter = CreateWindow(
L"BUTTON", L"ENTER",
WS_VISIBLE | WS_CHILD | WS_BORDER, //Styles
405, 140, 70, 25,
hWnd, (HMENU)ENTER_BUTTON, NULL, NULL);
return 0;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case ENTER_BUTTON:
int gwtstat = 0;
TCHAR title[] = _T("CSCI_NO");
gwtstat = GetWindowText(TextBox, &CSCI_NO[0], 60);
TCHAR buff[100] = L"";
TCHAR name[] = _T("CSCI_NO");
wsprintf(buff, L"The CSCI No you entered is: %s", CSCI_NO);
MessageBox(hWnd, buff, title, MB_OK);
break;
}
return 0;
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
它对我有用:
我正在使用 C++ 在我的 Win32 桌面应用程序上创建一个按钮,当按下该按钮时,会显示一个消息框,该消息框打印出文本框中的用户输入以及一些附加文本。但是,消息框显示带有象形文字的文本并给出错误 C6054:字符串 'buff' 可能不是零终止的。我不确定为什么文本没有正确显示在消息框中。
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#define ENTER_BUTTON 2345
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR heading[] = _T("CD ROM READER");
TCHAR CSCI_No_Inst[] = _T("Please enter the CSCI No below:");
switch (message)
{
case WM_CREATE:
{
TextBox = CreateWindow(TEXT("EDIT"), TEXT(""),
WS_VISIBLE | WS_CHILD | WS_BORDER,
150, 140, 250, 25,
hWnd, NULL, NULL, NULL);
HWND hwndButton_Enter = CreateWindow(
L"BUTTON", L"ENTER",
WS_VISIBLE | WS_CHILD | WS_BORDER, //Styles
405, 140, 70, 25,
hWnd, (HMENU)ENTER_BUTTON, NULL, NULL);
return 0;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case ENTER_BUTTON:
int gwtstat = 0;
TCHAR title[] = _T("CSCI_NO");
gwtstat = GetWindowText(TextBox, &CSCI_NO[0], 60);
TCHAR buff[100];
TCHAR name[] = _T("CSCI_NO");
_tprintf(buff, L"The CSCI No you entered is: %s", &CSCI_NO[0]);
MessageBox(hWnd, buff, title, MB_OK);
break;
}
}
}
首先需要初始化数组buff
,否则输出时会出现未初始化字符乱码
那么你应该使用swprintf
而不是_tprintf
(wprintf
)将字符串输出到buff
数组
我修改了代码如下,大家可以参考一下:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR heading[] = _T("CD ROM READER");
TCHAR CSCI_No_Inst[] = _T("Please enter the CSCI No below:");
TCHAR CSCI_NO[60] = L"";
switch (message)
{
case WM_CREATE:
{
TextBox = CreateWindow(TEXT("EDIT"), TEXT(""),
WS_VISIBLE | WS_CHILD | WS_BORDER,
150, 140, 250, 25,
hWnd, NULL, NULL, NULL);
HWND hwndButton_Enter = CreateWindow(
L"BUTTON", L"ENTER",
WS_VISIBLE | WS_CHILD | WS_BORDER, //Styles
405, 140, 70, 25,
hWnd, (HMENU)ENTER_BUTTON, NULL, NULL);
return 0;
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case ENTER_BUTTON:
int gwtstat = 0;
TCHAR title[] = _T("CSCI_NO");
gwtstat = GetWindowText(TextBox, &CSCI_NO[0], 60);
TCHAR buff[100] = L"";
TCHAR name[] = _T("CSCI_NO");
wsprintf(buff, L"The CSCI No you entered is: %s", CSCI_NO);
MessageBox(hWnd, buff, title, MB_OK);
break;
}
return 0;
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
它对我有用: