string char指针 char数组
获取string的字符个数用自身的方法 length()
std::string str1 = "str1";
size_t length = str1.length();
获取char* char[] 的字符个数用 strlen()
strlen()不能用于string
char charArray[] = "hello";
size_t charArrayLength = strlen(charArray);
const char* pChar = "你好";
size_t pCharLength = strlen(pChar);
std::cout << charArrayLength << std::endl;
std::cout << pCharLength << std::endl;
string转char* 要加 const
联想到Java中String是固定的
string str = "hello"; // #include <string>
const char* pointChar = str.data(); // 要加 const
char指针数组 可以直接赋值给string
char charArray[] = "hello";
const char* pChar = "你好";
std::string str1 = charArray;
std::string str2 = pChar;
std::cout << str1 << std::endl;
std::cout << str2 << std::endl;
WCHAR 就是 wchar_t (宽字符)
wchar_t类型主要用在国际化程序的实现中wchar_t数据类型一般为16位或32位
初始化
const wchar_t* WcharP1 = L"hello";
const wchar_t* WcharP2 = TEXT("world");
const WCHAR* WcharP3 = L"你好";
const WCHAR* WcharP4 = TEXT("世界");
wchar_t wcharArray1[] = L"wcharArray1"; //直接赋值
wchar_t wcharArray2[] = TEXT("wcharArray2");
wchar_t wcharArray3[3] = TEXT("12"); //只能放<=2个字符
wchar_t wcharArray4[4] = L"123"; //只能放<=3个字符
wchar_t wcharArray5[9] = L"123"; // 可以放少于8个字符 , 只能放<=8个字符
wchar_t wcharArray6[10]; // 初始化容量为10 , 能容纳9个字符 , 结束符占一个
//wcharArray1 = wcharArray2; //不行 数组不能改变值
//wcharArray1 = wcharArray3;; //不行 数组不能改变值
//wcharArray3 = wcharArray1;; //不行 数组不能改变值
//wcharArray1 = WcharP1;; //不行 数组不能改变值
//wcharArray3 = WcharP1;; //不行 数组不能改变值
WcharP1 = WcharP2; // const 定义的指针依然能改变指向
WcharP1 = WcharP3; // const 定义的指针依然能改变指向
WcharP1 = wcharArray1; // const 定义的指针依然能改变指向
WcharP1 = wcharArray5; // const 定义的指针依然能改变指向
WcharP1 = wcharArray6; // const 定义的指针依然能改变指向
wchar_t* wcharP1 = wcharArray1;
//wcharP1 = WcharP2; // const 定义的指针不能赋值给非 const的
//wcharP1 = WcharP3; // const 定义的指针不能赋值给非 const的
wcharP1 = wcharArray1; // const 和 非const 的指针都能被数组赋值
wcharP1 = wcharArray5; // const 定义的指针依然能改变指向
wcharP1 = wcharArray6; // const 定义的指针依然能改变指向
wcharP1 = wcharArray1;
wchar_t* wcharP2 = wcharArray2; //数组可以赋值给非const 的指针;
wchar_t* wcharP3 = wcharArray3;
wchar_t* wcharP4 = wcharArray4;
wchar_t* wcharP5 = wcharArray5;
wchar_t* wcharP6 = wcharArray6;
wcharP1 = wcharP6;
wcharP1 = wcharP5;
wcharP1 = wcharP4;
wcharP1 = wcharP3;
wcharP1 = wcharP2;
wcharP1 = wcharArray1;
//wcharP3 = WcharP3; // cont 不能赋值给 非const
//LPWSTR lpwstr1 = WcharP1; // const Wchar指针不能赋值给LPWSTR
LPWSTR lpwstr1 = wcharP1; // 非 const Wchar指针可以赋值给LPWSTR
LPWSTR lpwstr2= wcharArray1; // LPWSTR可以指向Wchar数组
//LPWSTR lpwstr3 = TEXT("lpwstr3"); LPSTR lpstr4 = L"lpwstr4"; // LPWSTR 不能用 L 或 TEXT 直接赋值 因为它没有const修饰
LPCWSTR lpcwstr3 = TEXT("lpcwstr3"); LPCWSTR lpcwstr4 = L"lpcwstr4"; // LPCWSTR就是 加了const的 LPWSTR 所以能用 TEXT("") L"" 赋值
LPWSTR 就是 WCHAR* 或 wchar_t* 以 NULL(0) 终止
typedef _Null_terminated_ WCHAR *NWPSTR, *LPWSTR, *PWSTR; //空终止字符串LPCWSTR 是 加了const的 LPWSTR
typedef _Null_terminated_ CONST WCHAR *LPCWSTR, *PCWSTR;wchar_t* 转 int
const wchar_t* wcharP1 = L"1234567";
int i1 = _wtoi(wcharP1);
int 转 wchar_t*
要用 #define _CRT_SECURE_NO_WARNINGS 1 压制警告
还要放在最上面, 各头文件引入的上面
#define _CRT_SECURE_NO_WARNINGS 1 //要放最上面 压制 _itow() int转wchar_t * 的警告
wchar_t dec_itow_buffer [_MAX_ITOSTR_BASE10_COUNT]; //定义一个 _itow() 十进制用的缓冲数组
int i1 = 123456;
wchar_t* wcharP1 = _itow(i1, dec_itow_buffer, 10); //参数3表示十进制
std::wcout << wcharP1;
获取wchar_t 指针或数组的长度 wcslen()
Check_return_ _ACRTIMP size_t __cdecl wcslen( _In_z_ wchar_t const* _String );wchar_t wchars[] = L"12345";
std::cout << wcslen(wchars) << std::endl;
const wchar_t* wstrP = L"123456";
std::cout << wcslen(wstrP) <<std::endl;
char 转 wchar_t 的函数: mbstowcs()
mbstowcs(wcharArray, pChar, strlen(pChar));
const char* pChar = "1234567";
wchar_t wcharArray[10]; //开辟的空间要比字符数大至少1
std::cout << "strlen()可获取char指针数组的字符数=" << strlen(pChar) << std::endl;
std::cout << "mbstowcs()返回size_t , 代表转换的字符数=" << mbstowcs(wcharArray, pChar, strlen(pChar)) << std::endl ;
std::wcout << "转换后,wchar数组的内容=" << wcharArray << std::endl ;
std::cout << "wcslen()获取wchar指针数组的字符数=" << wcslen(wcharArray