注册 登录
编程论坛 C++教室

输出为空的原因 求解哇

cbd666 发布于 2019-12-03 17:35, 2126 次点击
程序代码:
#include<stdio.h>
#include<windows.h>
#include<string>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {


    //多字符转宽字符
    char a[] = "这是多字符转宽字符";
    setlocale(LC_ALL, "");
    //先获取其a的大小
    DWORD Mnum; //用来保存大小
    Mnum = MultiByteToWideChar(CP_ACP, 0,a,-1, NULL,0); //计算a的大小 , 第三个参数为被转换的字符,第四个取最后\0之前的,第五个参数为接收转换之后的数据,由于我们这里先计算大小所以参数为NULL,第六个参数为被转换的大小
    wchar_t * b = new wchar_t[Mnum];
    if (!b) {
        delete[] b;
        return 1;
    }

    MultiByteToWideChar(CP_ACP, 0, a, -1, b, Mnum);
    wprintf(L"L->M %s\n", b);
   

    system("pause");
    return 0;
}


但是如果自己入口函数是main的话就可以进行输出

[此贴子已经被作者于2019-12-3 17:38编辑过]

2 回复
#2
rjsp2019-12-04 09:14
1. 不要贴无关的代码。比如,你的 MultiByteToWideChar 等完全跟你所想问的问题无关
2. 既然你需要“控制台”,为什么不创建控制台程序?既然你不需要“控制台”,那又为什么一定要用控制台相关的函数(printf等)?
3. wchar_t * b = new wchar_t[Mnum]; new失败不是返回nullptr,而是抛出异常std::bad_alloc

如果你一定要在没有控制台的程序中使用控制台,那你可以通过 AllocConsole() 来创建一个控制台。
程序代码:
#include <windows.h>
#include <stdio.h>
#include <locale.h>
#include <io.h>
#include <fcntl.h>
#include <conio.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    {
        AllocConsole();
        *stdin  = *_fdopen( _open_osfhandle((intptr_t)GetStdHandle(STD_INPUT_HANDLE),_O_TEXT), "r" );
        *stdout = *_fdopen( _open_osfhandle((intptr_t)GetStdHandle(STD_OUTPUT_HANDLE),_O_TEXT), "w" );
        *stderr = *_fdopen( _open_osfhandle((intptr_t)GetStdHandle(STD_ERROR_HANDLE),_O_TEXT), "w" );
    }

    setlocale( LC_CTYPE, "" );
    printf( "%s\n", "多字节字符串" );
    wprintf( L"%s\n", L"宽字符串" );

    _getch();
    return 0;
}

#3
cbd6662019-12-04 17:17
回复 2楼 rjsp
好 谢谢
1