char*和const char *的转换
- const char* 转 char*
(1)为什么不能直接赋值?
这里你可以这么想,假如const char类型字符串可以赋值给char类型,那不就意味着可以通过char变量来修改原本const char变量的值了吗?这显然是不可行的。
(2)转换方式 – ( const_cast是常用的去const顶层限定的方法)
const char* str = "this is a test";
char* chs = const_cast<char*>(str);
- char* 转const char *
(1)直接赋值。置于怎样生成一个char*类型变量并初始化,使用const_cast强转,或者是修改下编译器的字符集即可。也就是说支持隐式转换,这一点在函数传参过程体现尤为明显。
(2)使用指针类型强转。如下所示,使用static_cast或const_cast皆可。
const char* str = "this is a test";
char* ch = const_cast<char*>(str);
const char* dst = static_cast<const char*>(ch);
const char* chs = const_cast<const char*>(ch);
char[]转字符串
- 直接赋值
char arr[4] = { 'a','b','c' };
char* chs = arr1;
- 利用字符拷贝
string str = "strtrtr";
const char* st = "hehe";
char st1[] = "lalalala";
strncpy_s(st1, str.c_str(), sizeof(str));;
cout << st1 << endl;
str = "aaaaaa";
cout << st1 << endl;
char arr[4] = { 'a','b','c' };
char* str = arr1;
```cpp
char[]转char*
- 直接赋值,也就是说支持隐式转换。
char* 转string
- 直接赋值
const char* chs = "abc";
string str1 = chs;
- 构造函数赋值
const char* cstr = "this is a test";
string sstr(cstr, cstr + strlen(cstr));
string(const char * const _Ptr,const std::allocator<char> &_AI)
string转char[]
- 强制转换
char buf[BUFSIZE];
char* p=const_cast<char*>(str.c_str());
strcpy(buf,p);
- 字符拷贝
string str = "string";
char st1[] = "char arr";
strncpy_s(st1, str.c_str(), sizeof(str));
string转char*
- 使用c_str()
std::string str = "this is a test";
const char* cstr = str.c_str();
const char *std::string::c_str() const
- 好家伙,高级方法。
string str = "this is a test";
char* cstr = &str[0];
- 使用const_cast模板强转
std::string str = "this is a test";
char* cstr = const_cast<char*>(str.c_str());
写这个纯粹是无聊记录一下,也没什么实际意义,因为其实基本不会遇到这些花里胡哨的。一般的也就是函数调用的时候会涉及到,去掉顶层const或者加上顶层const,直接使用const_cast和隐式转换即可。再就是string和char类型的转换,使用c_str(),或者本身的隐式转换即可调用函数。
最后提一下,那就是string类型字符不能用printf + %s输出,会导致乱码,因为string输出流和char不一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)