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'
     //和上一步组合,弥补结果

猜你喜欢

转载自www.cnblogs.com/bxynlbyx/p/11756140.html