C++ 一个例子说明.c_str()函数

先举个例子说明一下:

atoi()是C语言中的字符串转换成整型数的一个函数,在例子的代码里面会用到,其函数原型为:

int atoi(const char *nptr);

下面是一个C语言的代码,可以正常运行:

#include <stdio.h>
#include <stdlib.h>

int main()
{  
    char *str = "123";
    int num = atoi(str);
    printf("%d\n",num);
    getchar();
    return 0;
}

但是在C语言中使用字符串远远没有C++方便,毕竟C++提供了string类,把代码改成C++版:

//这是个错误的代码
#include <iostream>
#include <string>

using namespace std;

int main()
{  
    string str ="123";
    int num = atoi(str);
    cout<<num<<endl;
    getchar();
    return 0;
}

此时代码会报错,因为string与const char类型是不符的,前面提到,atoi()是C语言提供的函数,而C语言中没有string类,字符串使用char指针来实现的。C与C++本身就是一家,为了让它们在一定程度上可以通用,就有了.c_str()函数。我们只需要把代码修改成这样:

//这是个正确的代码
#include <iostream>
#include <string>

using namespace std;

int main()
{  
    string str ="123";
    int num = atoi(str.c_str());
    cout<<num<<endl;
    getchar();
    return 0;
}

就是在string类型的str后面加上了.c_str()函数,这也就是.c_str()的作用: .c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同。因为string类本身只是一个C++语言的封装,其实它的string对象内部真正的还是char缓冲区,所以.c_str()指向了这个缓冲区并返回const。

    const _Elem *c_str() const
        {   // return pointer to null-terminated nonmutable array
        return (_Myptr());
        }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Astropeak

为什么不需要为Python对象添加 getter 和 setter

1132
来自专栏Python

基于JavaScript 声明全局变量的三种方式详解

JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍。 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量...

1928
来自专栏章鱼的慢慢技术路

《算法图解》第三章笔记与课后练习_递归

1293
来自专栏静晴轩

JavaScript字符串间的比较

字符串在JavaScript中几乎无处不在,在你处理用户的输入数据的时候,在读取或设置DOM对象的属性时,在操作cookie时,当然还有更 多…。@雪斌在Jav...

4489
来自专栏风中追风

try,finally中都有return时程序的执行顺序

 在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家各有各的说法,刚好今天有个朋友问了...

36115
来自专栏测试开发架构之路

C语言之函数

  结构化程序设计主张按功能来分析需求,主要原则自顶向下,逐步求精,模块化等。 主张按功能把软件系统逐步细分,每个功能都负责对数据进行一次处理,每个功能接收一些...

2704
来自专栏破晓之歌

python 模板实现-引擎的编写(有时间试一下)

1.模板的编写:https://blog.csdn.net/MageeLen/article/details/68920913

893
来自专栏C/C++基础

C/C++ sizeof(上)

sizeof是C/C++中的一个操作符(operator),其作用是返回一个对象或者类型所占的内存字节数,使用频繁,有必须对其有个全面的了解。

571
来自专栏aCloudDeveloper

C++基础题

刚在网上转看到几道对于巩固基础很有帮助的C++基础题,反正闲着也是闲着,就做了下,具体题型如下: 答案是我自己写,不一定对,如果有朋友看到不对的,欢迎指正,万分...

1905
来自专栏Python

Python中赋值、浅拷贝与深拷贝

   python中关于对象复制有三种类型的使用方式,赋值、浅拷贝与深拷贝。他们既有区别又有联系,刚好最近碰到这一类的问题,研究下。 一、赋值         ...

1798

扫码关注云+社区