Windows中Unicode和ANSI字符串(tchar.h)

一、函数/类型 命名

ANSI的字符串处理函数:
strlen()strcmp()strcpy()……
Unicode的字符串处理函数:
wcslen()wcscmp()wcscpy()……

提供的自动转换:
_TEXT()TCHAR_tcslen()_tcscmp()_tcscpy()……

二、规则

当定义了UNICODE宏时,TCHAR类型就为wchar_t,未定义时就为char

_TEXT()宏是为了方便的定义常量,定义了UNICODE宏时,会在字面量前面加上大写的L,如:wchar_t str[] = L"hello";未定义时就为字面量本身。

相应地,_tcsXXX系列函数也会在定义了UNICODE宏时转成宽字符处理函数,在未定义时转成ANSI的处理函数。

注意,Visual Studio创建的项目默认会定义UNICODE宏;
实际上,应确保要么同时定义了UNICODE_UNICODE,要么一个都不定义。(因为针对不属于C++标准的标识符,C运行库始终会为它们附加下划线前缀。但是Windows团队并没有这样做。)

三、Example

#define UNICODE
#define _UNICODE

// #undef UNICODE
// #undef _UNICODE

#include 
#include 
#include 

int main(void)
{
    TCHAR buf[] = _TEXT("你好啊");

    printf("sizeof _TCHAR:%ld\n", sizeof(TCHAR));

    printf("sizeof buf:%ld, len of buf:%ld\n", sizeof(buf), _tcslen(buf));
}

  • 参考书籍:《Windows核心编程 第5版》

你可能感兴趣的:(c++,windows,C语言,windows)