博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
string、char*和char[]的转换
阅读量:3957 次
发布时间:2019-05-24

本文共 2215 字,大约阅读时间需要 7 分钟。

char*和const char *的转换

  1. 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
(str); // 使用const_cast<>();
  1. char* 转const char *
    (1)直接赋值。置于怎样生成一个char*类型变量并初始化,使用const_cast强转,或者是修改下编译器的字符集即可。也就是说支持隐式转换,这一点在函数传参过程体现尤为明显。
    (2)使用指针类型强转。如下所示,使用static_cast或const_cast皆可。
const char* str = "this is a test";char* ch = const_cast
(str); // 生成char*字符串const char* dst = static_cast
(ch); // 使用static_castconst char* chs = const_cast
(ch); // 使用 const_cast

char[]转字符串

  • char[]字符数组转char*:
  1. 直接赋值
char arr[4] = {
'a','b','c' }; char* chs = arr1; // 调试你会发现*chrs的值已经是 "abc"
  1. 利用字符拷贝
string str = "strtrtr";	const char* st = "hehe";	char st1[] = "lalalala";	//strncpy_s(st1, st, strlen(st) + 1); // 注意加1操作	strncpy_s(st1, str.c_str(), sizeof(str));;	// tp = temp; //错误,不能实现	cout << st1 << endl;	str = "aaaaaa";	cout << st1 << endl;
  • char[]字符数组转string
    1. 直接赋值
char arr[4] = {
'a','b','c' }; char* str = arr1; // 调试你会发现str的值已经是 "abc"```cpp

char[]转char*

  1. 直接赋值,也就是说支持隐式转换。

char* 转string

  1. 直接赋值
const char* chs = "abc";	string str1 = chs;  // 或者 string str1(chs);
  1. 构造函数赋值
const char* cstr = "this is a test";	string sstr(cstr, cstr + strlen(cstr));	// 原型如下:	string(const char * const _Ptr,const std::allocator
&_AI)

string转char[]

  1. 强制转换
//char[]可以直接赋值给stiring//string不能直接转换为char[],可以先转换为char*,再通过strcpy来转换	char buf[BUFSIZE];	char* p=const_cast
(str.c_str()); strcpy(buf,p);
  1. 字符拷贝
string str = "string";	char st1[] = "char arr";	strncpy_s(st1, str.c_str(), sizeof(str));

string转char*

  1. 使用c_str()
std::string str = "this is a test";	const char* cstr = str.c_str();			// 必须是const char*类型,因为c.str()的函数原型为:	const char *std::string::c_str() const
  1. 好家伙,高级方法。
string str = "this is a test";	char* cstr = &str[0];
  1. 使用const_cast模板强转
std::string str = "this is a test";	char* cstr = const_cast
(str.c_str());

写这个纯粹是无聊记录一下,也没什么实际意义,因为其实基本不会遇到这些花里胡哨的。一般的也就是函数调用的时候会涉及到,去掉顶层const或者加上顶层const,直接使用const_cast和隐式转换即可。再就是string和char类型的转换,使用c_str(),或者本身的隐式转换即可调用函数。

最后提一下,那就是string类型字符不能用printf + %s输出,会导致乱码,因为string输出流和char不一样。

转载地址:http://ubozi.baihongyu.com/

你可能感兴趣的文章