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'
    //和上一步组合,弥补结果
posted @ 2019-10-28 22:49  一只蒟蒻也有大佬梦  阅读(1524)  评论(0编辑  收藏  举报