当前位置:   article > 正文

C++字符串和C字符串的转换_c++ c 字符串转换

c++ c 字符串转换

一 点睛

C++提供的由C++字符串转换成对应的C字符串的方法是使用data()、c_str()和copy()来实现。

data():以字符数组的形式返回字符串的内容,但并不添加'\0'

c_str():返回一个以'\0'结尾的字符数组

copy():把字符串的内容复制或写入既有的c_string或字符数组内。

注意:C++字符串并不以'\0'结尾。

c_str()语句可以生产一个const char *指针,并指向字符数组。这个数字的数据是临时的,当有一个改变这些数据的成员函数被调用,其中的数据就会失效。因此,要么现用现转换,要么把它的数据复制到用户自己可以管理的内存后再转换。

二 c_str()使用方法实战

1 代码

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. int main(){
  5. string str="Hello world.";
  6. const char * cstr=str.c_str();
  7. cout<<cstr<<endl;
  8. str="Abcd.";
  9. cout<<cstr<<endl;
  10. return 0;
  11. }

2 运行

  1. [root@localhost charpter03]# g++ 0303.cpp -o 0303
  2. [root@localhost charpter03]# ./0303
  3. Hello world.
  4. Abcd.

3 说明

改变了str的内容,cstr的内容也会随着改变。所以如果上面继续使用C指针的话,导致的错误将是不可想象的。既然C指针指向的内容容易失效,就可以考虑把数据复制出来。

三 将c_str()里的内容负责出来以保持有效性

1 代码

  1. #include<iostream>
  2. #include<string>
  3. #include<string.h>
  4. using namespace std;
  5. int main(){
  6. char * cstr=new char[20];
  7. string str="Hello world.";
  8. strncpy(cstr,str.c_str(),str.size());
  9. cout<<cstr<<endl;
  10. str="Abcd.";
  11. cout<<cstr<<endl;
  12. return 0;
  13. }

2 运行

  1. [root@localhost charpter03]# g++ 0304.cpp -o 0304
  2. [root@localhost charpter03]# ./0304
  3. Hello world.
  4. Hello world.

3 说明

用strncpy函数将str.c_str()内容复制到cstr里了,这样就能保证cstr里的内容不随str内容改变而改变。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/309840
推荐阅读
相关标签
  

闽ICP备14008679号