C++中的c_str()
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' ; //和上一步组合,弥补结果 |