摘要:作者:zyl910 前面测试了各种编译器的执行结果,但为什么它们的执行结果是那样呢?这需要仔细分析。VC2005的测试结果比较典型,而且调试跟踪比较方便,于是本篇对VC2005的crt源码进行分析。一、须知 开发工具是VC2005,平台为32位的x86,编译模式为Debug,使用MBCS字符集。二、cout输出窄字符串2.1 已初始化locale “已初始化locale”是指——在输出前执行了初始化locale,即执行了下列语句—— // init. locale::global(locale("")); wcout.imbue(locale(""));
阅读全文
01 2013 档案
摘要:作者:zyl910 C++标准为C++标准IO库设计了十分完善的国际化文本处理机制。但在实际使用中,却发现各种编译器对它的支持性存在较大的差异,很多时候无法正确的输出字符。于是我对此进行了深入的调查。一、说明1.1 测试程序 下面有一段很简单的程序,分别利用cout、wcout、printf输出字符串。具体代码为——#include <stdio.h>#include <locale.h>#include <wchar.h>#include <string>#include <iostream>using namespace std;
阅读全文
摘要:作者:zyl910 将Windows程序移植到Linux等平台时,经常会遇到tchar.h问题与字符串的格式控制字符问题(char串、wchar_t串、TCHAR串混合输出)。本文探讨如何解决这些问题。一、背景1.1 历史 传统的C程序使用char字符串,采用ANSI+DBCS方案来支持当地语言,不能实现多国语言同时显示。 当年微软在设计Windows NT时考虑到国际化,决定内核支持Unicode,对应wchar_t类型。那时的Unicode只有16位,于是Windows中的wchar_t是16位的。 为了兼容老程序,与字符串有关的API一般有两套——A结尾的表示是ANSI版,使用c...
阅读全文
摘要:作者:zyl910 用VC2012编译了一个程序,在Windows 8、Windows 7、Windows Vista下都能正常运行。但在Windows XP下运行时,却报错不能运行,具体错误信息为“指定的可执行文件不是有效的 Win32 应用程序”。 在WinXP中装好“Visual C++ Redistributable for Visual Studio 2012 Update 1”。但该程序还是无法运行,仍是报告上述错误。 用eXeScope打开该exe,发现操作系统需求为“6.0”,即只能在Windows Vista或更高的操作系统下运行。 我的VS2012已经升级为“Vis...
阅读全文
摘要:作者:zyl910 以前我曾为了让VC++等编译器支持C99的整数类型,编写了同名的stdint.h、inttypes.h来智能处理(http://www.cnblogs.com/zyl910/archive/2012/08/08/c99int.html)。现在将其升级到v1.01版。一、改动说明1.1 包含目录问题 在1.00版,我编写的头文件与系统头文件同名,利用“#include "XXX"”与“#include <XXX>”的区别,使其智能使用系统头文件。 这样做的优点是基本不需改动代码(只需将“#include <stdint.h>”改为“
阅读全文
摘要:作者:zyl910 有的时候将子目录下的所有文件的修改时间、大小、全限定名等信息导出到Excel表格中。 尝试过命令行,但不太好用——1.对于“dir /s >1.txt”,当前目录与文件列表是分开显示的,合并起来太麻烦,而且没有文件的全限定名。2.对于“dir /b /s >1.txt”,只有全限定名,没有修改时间、大小等详细信息。3.对于“tree /f >1.txt”,只有目录树,没有修改时间、大小等详细信息。 在网上找了几个导出文件列表的工具,但都不太好用。于是决定自己编写。 用什么编程工具开发呢?考虑到以后可能经常改进输出内容的格式,所以用VBScript脚本来写是
阅读全文