c_str()函数返回一个指向正规C字符串的指针 const char*,内容就是string本身
C++中的这个函数是为了与c语言兼容,c中无string类型,故必须通过string类对象的成员函数c_str()把string对象转换成c中的字符串样式
#include<iostream> #include<cstring> using namespace std; int main(){ const char* c; string s="1234"; c=s.c_str();//直接在指针上操作 cout<<c<<endl; s="abcd"; cout<<c<<endl; return 0; }
结果:1234 abcd
这样通过c指针进行操作,会是字符串发生改变。
#include<iostream> #include<cstring> using namespace std; int main(){ char *c=new char[20]; string s="1234"; strcpy(c,s.c_str());//通过strcpy()函数 头文件#include<string.h>c里面的一个字符串复制的函数 返回char* cout<<c<<endl; s="abcd"; cout<<c<<endl; return 0; }
结果:1234 1234
通过strcpy()函数进行复制,之后的操作并不会改变字符串
c_str()返回的是一个临时指针,不能对其进行操作,不需要手动释放或删除。
strcpy与strncpy的区别
第一种情况:
1
2
3
4
5
6
7
8
9
|
char
* p=
"how are you ?"
;
char
name[20]=
"ABCDEFGHIJKLMNOPQRS"
;
strcpy
(name,p);
//name改变为"how are you ? "====>正确!
strncpy
(name,p,
sizeof
(name));
//name改变为"how are you ?" =====>正确!后续的字符将置为NULL
|
第二种情况:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
char
* p=
"how are you ?"
;
char
name[10];
strcpy
(name,p);
//目标串长度小于源串,错误!
name[
sizeof
(name)-1]=
'\0'
;
//和上一步组合,弥补结果,但是这种做法并不可取,因为上一步出错处理方式并不确定
strncpy
(name,p,
sizeof
(name));
//源串长度大于指定拷贝的长度sizeof(name),注意在这种情况下不会自动在目标串后面加'\0'
name[
sizeof
(name)-1]=
'\0'
;
//和上一步组合,弥补结果
|