none
输出汉字失败,怎么回事? RRS feed

  • 问题

  • 为什么输出不了汉字?

    代码如下:

    #include <stdio.h>
    #include<stdlib.h>
      
    int main( void )
    {
    	wchar_t *wstring = L"哈哈";
    	wprintf(L"Strings in field (2):%ls\n",wstring);
    	system("pause");
    	return 0;
    }


    煮酒论英雄

    2012年2月29日 2:21

答案

  • #include <stdio.h>

    #include <locale.h>

    int wmain(int argc, wchar_t *argv[])
    {
        setlocale (LC_ALL,
    "");
        wchar_t
    *pszTmp = L"中文";
        wprintf(L
    "%s\n", pszTmp);
        system("pause");

        return 0;
    }

    控制台程序的默认区域设置的问题, 需要在代码里面设置区域, 就可以让wprintf正常输出中文了.

    通常习惯还应该把项目属性设置成使用Unicode并且使用wmain()入口函数.




    2012年2月29日 5:03
  • 改进了代码 添加了头文件locale.h 添加函数setlocale(ALL,"")
    代码如下:

    #include <stdio.h>
    #include<stdlib.h>
    #include<locale.h>
      
    int main( void )
    {
     wchar_t *wstring = L"哈哈";
     setlocale(LC_ALL,"");
     wprintf(L"Strings in field (2):%ls\n",wstring);
     system("pause");
     return 0;
    }
    

    vs2010下可以编译通过了。

    注:通过这个问题我又发现其实不管是否使用wchar类型、wprintf、wscanf等函数也能够正常输入输出汉字。另外在项目→属性→常规下 字符集 使用多字符集也是一种方法


    煮酒论英雄

    2012年3月1日 9:12

全部回复

  • #include <stdio.h>

    #include <locale.h>

    int wmain(int argc, wchar_t *argv[])
    {
        setlocale (LC_ALL,
    "");
        wchar_t
    *pszTmp = L"中文";
        wprintf(L
    "%s\n", pszTmp);
        system("pause");

        return 0;
    }

    控制台程序的默认区域设置的问题, 需要在代码里面设置区域, 就可以让wprintf正常输出中文了.

    通常习惯还应该把项目属性设置成使用Unicode并且使用wmain()入口函数.




    2012年2月29日 5:03
  • VC6下测试,可以输出中文


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年2月29日 12:22
    版主
  • 我用的是vs2010


    煮酒论英雄

    2012年3月1日 5:41
  • 再问一下 控制台程序的默认区域设置能不能在vs2010里面找到设置参数对话框?

    另外很少见wmain这种写法 我知道太少 我自己去看看


    煮酒论英雄

    2012年3月1日 5:49
  • 改进了代码 添加了头文件locale.h 添加函数setlocale(ALL,"")
    代码如下:

    #include <stdio.h>
    #include<stdlib.h>
    #include<locale.h>
      
    int main( void )
    {
     wchar_t *wstring = L"哈哈";
     setlocale(LC_ALL,"");
     wprintf(L"Strings in field (2):%ls\n",wstring);
     system("pause");
     return 0;
    }
    

    vs2010下可以编译通过了。

    注:通过这个问题我又发现其实不管是否使用wchar类型、wprintf、wscanf等函数也能够正常输入输出汉字。另外在项目→属性→常规下 字符集 使用多字符集也是一种方法


    煮酒论英雄

    2012年3月1日 9:12
  • wscanf wprintf wchar等还有头文件wchar.h 在C library中并没有找到,所以我想这个应该是windows特有的类型 特有的头文件


    煮酒论英雄

    2012年3月1日 9:17