zoukankan      html  css  js  c++  java
  • Visual Studio的Unicode和ASCII

    Visual C++自2005版之后,工程的默认字符集属性改为使用宽字符集(Unicode),因此默认情况下不应使用多字节字符集(ASCII)。

    这个改动让我们从网上、书上等处获取的代码无法正常编译。例如下面这个基于控制台、获取文件绝对路径的程序。

    #include<windows.h>
    #include<stdio.h>
    int main()
    {
       char szDir[MAX_PATH];
     
       GetCurrentDirectory(MAX_PATH,szDir);
       printf("The Current Directory is %s",szDir);
     
       getchar();
       return 0;
    }

    在2005以后的Visual C++版本中,由于默认使用了Unicode,该程序无法正常编译。

    解决办法有很多:

    方法一:(推荐)

    使用Unicode的类型、函数。本例中将类型char变为TCHAR,函数printf改为wprintf,字符串的前面加L,或用放在_T( )的括号中。如下:

    #include<windows.h>
    #include<stdio.h>
    int main()
    {
       TCHAR szDir[MAX_PATH];
     
       GetCurrentDirectory(MAX_PATH,szDir);
       wprintf(L"The Current Directory is %s",szDir);
     
       getchar();
       return 0;
    }

    方法二:(推荐)

    不修改源代码,而去修改编译器的设置。

    右键“项目”—“属性”—“常规”—“字符集”(由默认的Unicode字符集改为“未设置”或“多字节字符集”)

    方法三:(不推荐)

    把函数改为ASCII的函数。如将GetCurrentDirectory改为GetCurrentDirectoryA。

    另外,编译无法通过时通常提示类型转换方面的错误信息。比如,提示不能将参数 2 从“char [260]”转换为“LPWSTR”。如果此时将char类型字符串强制转换成LPWSTR类型,由于Unicode中每个字符占2个字节,ASCII中每个字符占一个字节,printf函数在输出时,只会输出第一个字符。

  • 相关阅读:
    Evaluate Reverse Polish Notation
    openstack VM可以ping外部网络,但是外部网络ping不通VM
    Object Storage(Swift)安装过程——Havana
    完数c实现
    ubuntu用户及用户组文件信息
    Ubuntu12.04安装java以及Eclipse和Tomcat
    Ubuntu 12.04 Server OpenStack Havana多节点(OVS+GRE)安装
    ERROR:the server has either erred or is incapable of performing the requested operation
    openMPI小集群安装
    分片传输——send和recv函数
  • 原文地址:https://www.cnblogs.com/cnstalker/p/4828970.html
Copyright © 2011-2022 走看看