64,639
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string.h>
void Reverse(char* word) // 适合C风格字符串反转函数
{
// 来源 C++ Primer Plus 第五章 forstr2.cpp -- reversing an array
char temp;
size_t i, j;
for (j = 0, i = strlen(word) - 1; j < i; --i, ++j) {
temp = word[i];
word[i] = word[j];
word[j] = temp;
}
}
void Reverse(wchar_t* word) // 适合宽字节
{
wchar_t temp;
size_t i, j;
for (j = 0, i = wcslen(word) - 1; j < i; --i, ++j) {
temp = word[i];
word[i] = word[j];
word[j] = temp;
}
}
int main()
{
using namespace std;
setlocale(LC_ALL, ""); // 用这句 GCC 和 VC编译器都支持输出宽字节
char cs[] = "Who are you?";
wchar_t ws[] = L"我是谁?";
Reverse(cs);
Reverse(ws);
cout << cs << endl;
wcout << ws << endl;
return 0;
}
wstring wa = L"abc";
const wchar_t* ch2 = wa.c_str();
cout << ch2 << endl;
输出的结果为:00283BB2,这个有问题。如果:cout << *ch2 << endl;则输出第一个字符97.
string a = "abc";
const char* ch = a.c_str();
cout << ch << endl;
输出的结果为:abc,这个是正确的
怎么回事?
L"宽字节字符串" // 前缀 L 表示编译的时候""内的按宽字节解释
_T"自动单字节或者宽字节字符串" // 头文件里 使用 && 使用条件编译,能按你的项目属性(是否UNIcode码),自动 选择是否按 宽字节处理.
tchar // 参考_T,应该也是这样的
typedef wchar_t WCHAR;
typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR;
typedef char CHAR;
typedef CONST CHAR *LPCCH,*PCSTR,*LPCSTR;
可右键打开头文件定义查到如上。提供分析可以这样理解
const char* == LPCSTR // 指向C风格字符串的指针,C++ 如果指向常量字符串,会提示使用const 修饰
const wchar_t* == LPCWSTR // 指向宽字节,其他同上行
string 和 wstring // 是C++的字符串类,单字节和宽字节之分, 使用 str.c_str() 转换成 const char*