zoukankan      html  css  js  c++  java
  • std::string中data()和c_str()的区别

    data和c_str

    data()c_str()都是用来获取底层字符串的首地址的,但是在C++98中规定的是data()返回的字符串不保证有结尾,但是c_str()返回的字符串保证有结尾,也就是C++98标准在设计字符串的时候是想抛弃C风格的字符串语法的,但是在实际应用中,往往需要将C++的string转换为C风格的字符串const char*
    这一点平常使用的时候没问题,但如果想直接通过C风格的接口修改string中的内容就麻烦了,因为&str[0]返回的字符串并不保证有结尾'':

    std::string str = "hello";
    // 在C++98中是未定义行为
    auto p = &str[0]
    

    好在C++11标准中意识到了这一点,规定string底层存储的字符串直接采用C风格的字符串语法,所以data()c_str()就变成了同义词了:

    std::string str = "hello";
    // 在C++11中是正确的,p指向一个空字符串
    auto p = &str[0]
    
  • 相关阅读:
    Post返回json值
    调用接口并获取放回json值
    c# 获取IP
    sqlserver2008不允许保存更改
    判断客户端是否是手机或者PC
    3.docker tomcat集群
    1.docker 安装
    Maven profiles 多环境配置
    MySQL 定时任务
    MyBatis 三剑客
  • 原文地址:https://www.cnblogs.com/HachikoT/p/13960458.html
Copyright © 2011-2022 走看看