我正在使用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;
        }
    }
}发布于 2020-11-24 13:39:59
首先需要初始化数组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);
}这对我来说很管用:

https://stackoverflow.com/questions/64980557
复制相似问题