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函数在输出时,只会输出第一个字符。

时间: 2024-11-05 18:50:20

Visual Studio的Unicode和ASCII的相关文章

转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码

上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的一个地方,我们对它进行了总结和归纳.本篇文章我们将继续讲解C++开发中容易混淆的另一个概念——多字节字符集与Unicode字符集. 多字节字符与宽字节字符 char与wchar_t 我们知道C++基本数据类型中表示字符的有两种:char.wchar_t. char叫多字节字符,一个char占一个字节

Visual Studio 2005 学习笔记一 入门

转载自:http://blog.163.com/zm_shichaoren/blog/static/6880234120087211452776/ Visual studio 2005入门记 终于卸掉了Visual C++6.0,换上了全新的Visual C++2005.尽管是简体中文版的,但是功能强大的Visual studio 2005 IDE庞大的开发环境和N多的配置设置,学习起来还不是很简单.C++/CLI通过对ISO C++ 标准的纯粹扩展和新语法,不像传统的MS-DOS 控制台程序,

visual studio开发工具的C#主流控件属性一览表

visual studio开发工具的C#主流控件属性一览表 详细的介绍了各控制属性的详细中文介绍 C#控件及常用设计整理 1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2) WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三种: Normal (窗体正常显示). Minimized(窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示). (3)StartPosition属性:用来获取或设置运

Visual Studio 中的 .NET Framework 类库

Visual Studio 中的 .NET Framework 类库 .NET Framework 类库由命名空间组成.每个命名空间都包含可在程序中使用的类型:类.结构.枚举.委托和接口. 当您在 Visual Studio 中创建 Visual Basic 或 Visual C# 项目时,已经引用了最常用的基类 DLL(程序集).但是,如果您需要使用尚未引用的 DLL 中的类型,则需向此 DLL 添加引用.有关更多信息,请参见添加和移除引用. 以下主题提供了下列信息: 每个功能区域的最重要命名

自己动手让Visual Studio的Win32向导支持生成对话框程序

Visual Studio的MFC向导可以生成基于对话框的程序,而win32向导却不支持,是不是很不给力呢?虽然VAX可以直接插入对话框的代码段,但还是没有直接生成来得爽,下面就动手来改造吧. 本文所做的修改仅在自己的VS里测试通过,大家修改之前请备份原文件. 那我们需要改什么呢?看图吧. 首先,找到"VS安装目录\VC\VCWizards\AppWiz\Generic\Application\",如我电脑上的目录就是 "D:\Program Files\Microsoft

修改VISUAL STUDIO EXPRESS 2012新建C++文件编码

本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载: 本文标题:修改Visual Studio Express 2012新建C++文件编码 本文链接:http://zengrong.net/post/1900.htm 2013-12-03 更新:增加关于UTF-8(BOM)的说明 我突然发现Visual Studio Expres

带你玩转Visual Studio——结局汇总

感谢 这一系列文章陆陆续续写了一个月,也差不多可以告一个段落了.感谢读者们一直以来对我关注和支持!现将这一系列文章在这做一个汇总,以方便大家查阅.若是初学者,建议按顺序阅读. 系列文章目录 带你玩转Visual Studio--开篇介绍 带你玩转Visual Studio--带你新建一个工程 带你玩转Visual Studio--带你了解VC++各种类型的工程 带你玩转Visual Studio--带你高效开发 带你玩转Visual Studio--带你高效管理代码 带你玩转Visual Stu

有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代

有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 关于

在 Visual Studio 中使用正则表达式

Visual Studio 使用 .NET framework 正则表达式查找和替换文本. 在 Visual Studio 2010 和早期版本中,Visual Studio 在“查找和替换”窗口中使用自定义正则表达式语法.  本主题介绍如何将一些更常用的自定义正则表达式符号转换为 .NET 版本. 用途 新建 旧 新示例 匹配任何单个字符(分行符除外) . . a.o 匹配“around”中的“aro”和“about”中的“abo”,但不匹配“across”中的“acro”. 匹配前面表达式的