• c++ string.c_str()小结


    c++

    const char *c_str();
    c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.(其实它指向的是string对象内部真正的char缓冲区),所以返回const,以防止用户的修改。
    这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。


    操作c_str()函数的返回值时,只能使用c字符串的操作函数,如:strcpy()等函数.因为,string对象可能在使用后被析构函数释放掉,那么你所指向的内容就具有不确定性.

    {

    string var = "Olympic";

    char *ptr = var.c_str();

    }//还不能被编译,因为va.c_str()返回临时指针,赋值给ptr之后,在}结束之后,var对象就得析构,最后要使用ptr,就是垃圾内容

    一,C语言的字符串

    在C语言里,对字符串的处理一项都是一件比较痛苦的事情,因为通常在实现字符串的操作的时候都会用到最不容易驾驭的类型——指针。

    比如下面这个例子:

    //example 1:

    char str[12] = "Hello";

    char *p = str;

    *p = 'h';  //改变第一个字母

    //example 2:

    char *ptr = "Hello";

    *ptr = 'h';  //错误

    第一个字符串时用数组开辟的,它是可以改变的变量。而第二个字符串则是一个常量,也就是字面值。ptr只是指向它的指针而已,而不能改变指向的内容。

    要想通过指针来改变常量是错误,正确的写法应该是用const指针。

    const char *ptr = "Hello";

    二,初识string类

    正是因为C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,定义在头文件<string>。注意<string.h>和<cstring>都是错误的,这两个头文件主要定义C风格字符串操作的一些方法,譬如strlen(), strcpy()等。第一个是C的头文件格式,而第二个是C++风格的头文件,但是和<string.h>是一样的,它的目的是为了和C兼容。

    看下面例子:

    //example 3:

    string str("world");   //可以用C风格字符串初始化

    string words = "Hello";

    string greet = words;

    string  join = greet + words;  //可以像基本类型一样操作

  • 相关阅读:
    数据库各类模板
    React+Cesium安装部署
    VS2019+QT 制作自定义控件
    Vue+arcgis(1)
    将TIF/PNG等转为GeoTIFF
    QT 同名信号无法识别的问题
    VSCode配置PyQt5
    Python中类属性和self属性的区别
    postgresql的数据复制
    在windows server 2012 R2上搭建nginx环境
  • 原文地址:https://www.cnblogs.com/kkshaq/p/4462206.html
Copyright © 2020-2023  润新知