Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我在消息框中看到象形文字 我在我的Win32桌面应用程序上创建了一个按钮,使用C++时,它会显示一个消息框,它打印出文本框中的用户输入以及一些附加文本。但是,消息框以象形文字显示,并给出错误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; } } } #包括 #包括 #包括 #包括 #定义输入按钮2345 LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM) { int wmId,wmEvent; PAINTSTRUCT-ps; HDC-HDC; TCHAR标题[]=“CD-ROM读卡器”); TCHAR CSCI No__Inst[]=“请在下面输入CSCI No:”; 开关(信息) { 案例WM_创建: { TextBox=CreateWindow(文本(“编辑”),文本(“”), WS|U可见| WS|U儿童| WS|U边界, 150, 140, 250, 25, hWnd,NULL,NULL,NULL); HWND hwndButton_Enter=CreateWindow( L“按钮”,L“输入”, WS|u可见| WS|u子对象| WS|u边框,//样式 405, 140, 70, 25, hWnd,(HMENU)输入按钮,空,空); 返回0; } case WM_命令: { 开关(LOWORD(wParam)) { 案例输入按钮: int gwtstat=0; TCHAR标题[]=“CSCI编号”); gwtstat=GetWindowText(文本框和CSCI编号[0],60); TCHAR buff[100]; TCHAR名称[]=“CSCI编号”); _tprintf(buff,L“您输入的CSCI编号为:%s”,&CSCI_编号[0]); 消息框(hWnd、buff、标题、MB_OK); 打破 } } }_C++_Variables_Winapi_Button_Messagebox - Fatal编程技术网

为什么我在消息框中看到象形文字 我在我的Win32桌面应用程序上创建了一个按钮,使用C++时,它会显示一个消息框,它打印出文本框中的用户输入以及一些附加文本。但是,消息框以象形文字显示,并给出错误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; } } } #包括 #包括 #包括 #包括 #定义输入按钮2345 LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM) { int wmId,wmEvent; PAINTSTRUCT-ps; HDC-HDC; TCHAR标题[]=“CD-ROM读卡器”); TCHAR CSCI No__Inst[]=“请在下面输入CSCI No:”; 开关(信息) { 案例WM_创建: { TextBox=CreateWindow(文本(“编辑”),文本(“”), WS|U可见| WS|U儿童| WS|U边界, 150, 140, 250, 25, hWnd,NULL,NULL,NULL); HWND hwndButton_Enter=CreateWindow( L“按钮”,L“输入”, WS|u可见| WS|u子对象| WS|u边框,//样式 405, 140, 70, 25, hWnd,(HMENU)输入按钮,空,空); 返回0; } case WM_命令: { 开关(LOWORD(wParam)) { 案例输入按钮: int gwtstat=0; TCHAR标题[]=“CSCI编号”); gwtstat=GetWindowText(文本框和CSCI编号[0],60); TCHAR buff[100]; TCHAR名称[]=“CSCI编号”); _tprintf(buff,L“您输入的CSCI编号为:%s”,&CSCI_编号[0]); 消息框(hWnd、buff、标题、MB_OK); 打破 } } }

为什么我在消息框中看到象形文字 我在我的Win32桌面应用程序上创建了一个按钮,使用C++时,它会显示一个消息框,它打印出文本框中的用户输入以及一些附加文本。但是,消息框以象形文字显示,并给出错误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; } } } #包括 #包括 #包括 #包括 #定义输入按钮2345 LRESULT回调WndProc(HWND HWND,UINT消息,WPARAM WPARAM,LPARAM LPARAM) { int wmId,wmEvent; PAINTSTRUCT-ps; HDC-HDC; TCHAR标题[]=“CD-ROM读卡器”); TCHAR CSCI No__Inst[]=“请在下面输入CSCI No:”; 开关(信息) { 案例WM_创建: { TextBox=CreateWindow(文本(“编辑”),文本(“”), WS|U可见| WS|U儿童| WS|U边界, 150, 140, 250, 25, hWnd,NULL,NULL,NULL); HWND hwndButton_Enter=CreateWindow( L“按钮”,L“输入”, WS|u可见| WS|u子对象| WS|u边框,//样式 405, 140, 70, 25, hWnd,(HMENU)输入按钮,空,空); 返回0; } case WM_命令: { 开关(LOWORD(wParam)) { 案例输入按钮: int gwtstat=0; TCHAR标题[]=“CSCI编号”); gwtstat=GetWindowText(文本框和CSCI编号[0],60); TCHAR buff[100]; TCHAR名称[]=“CSCI编号”); _tprintf(buff,L“您输入的CSCI编号为:%s”,&CSCI_编号[0]); 消息框(hWnd、buff、标题、MB_OK); 打破 } } },c++,variables,winapi,button,messagebox,C++,Variables,Winapi,Button,Messagebox,首先需要初始化数组buff,否则在输出时会出现未初始化字符的乱码 然后应该使用swprintf而不是\u tprintf(wprintf)将字符串输出到buff数组 我对代码进行了如下修改,您可以参考它: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; TCHAR

首先需要初始化数组
buff
,否则在输出时会出现未初始化字符的乱码

然后应该使用
swprintf
而不是
\u 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);
}
这对我很有用:


显示
CSCI\u NO
的定义。它应该是一个
TCHAR
数组,至少包含60个元素,或者是一个指向内存块的指针,您已经分配了足够的存储空间。如果您的输入正好是60个字符,那么您可能会出现一个off by一个错误。我不太记得
GetWindo的规范了wText
关于达到缓冲区限制时的字符串终止,但您可以在Microsoft文档中轻松查找。此代码是
TCHAR
\u TCHAR
wchar\u t
API的丑陋组合。选择一个API并坚持使用它。由于其余代码基于
TCHAR
,正确的解决方案是使用
\u stprintf()
进行匹配,如果
TCHAR
wchar\u t
(在这种情况下似乎是这样),则将解析为
swprintf()