C++基本数据类型中表示字符的有两种: char、wchar_t


char叫多字节字符,一个char占1个字节,之所以叫多字节字符是因为它表示一个英文字符时是一个字节,而中文字符时是多个字节。


wchar_t被称为宽字符,一个wchar_t占2个字节。之所以叫宽字符是因为所有的字都要赋值时,前面要加L,如:wchar_t str[3]=L”中国”;。


注意:两种字符对应的字符串函数也不一样,strlen()对应wcslen(),strcpy()对应wcscpy)一般把char类型函数中的" str"替换为" wcs"即可。

#include<iostream>


#include <stdio.h>
#include <Locale.h> //解决中文乱码问题头文件
#include <string.h>
using namespace std;


int main(){

	char *str1 = "A中";
	
	printf("%s %d\n", str1, strlen(str1));

	_wsetlocale(LC_ALL, L"chs");//把输出设置为中文.
	wchar_t *str2 = L"A中";//必须加L 表示字符串是unicode
	wprintf(L"%s %d\n", str2, wcslen(str2));//计算字符个数,遇到\0结束

	int a;
	cin >> a;
	return 0;
}


/*
输出结果一个为2,一个为3
*/

windows中API函数后面带A与W的区别


Win32API中带字符串的API一般都有两个版本,例如CreateFileA和CreateFileW。

当然也有例外,例如GetProcAddress函数。A代表ANSI编码,W代表Unicode字符集。

Windows中的Unicode字符一般指UCS2的UTF16-LE编码。

看如下预编译指令:

#ifdef UNICODE
#define MessageBox  MessageBoxW
#else
#define MessageBox  MessageBoxA
#endif // !UNICODE