标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p, n)。 1. c_str():生成一个const char*指针,指向以空字符终止的数组。 注: ①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复...
② c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。 2. data():与c_str()类似,但是返回的数组不以空字符终止。 3. copy(p,n,size_type _Off = 0):从string类型对象中至多复制n个字符到字符指针p指向的空间中。默认从首字符开始,但是也可以指定,开始的位置(记住...
std::string str ="hello";// 在C++98中是未定义行为autop = &str[0] 好在C++11标准中意识到了这一点,规定string底层存储的字符串直接采用C风格的字符串语法,所以data()和c_str()就变成了同义词了: std::string str ="hello";// 在C++11中是正确的,p指向一个空字符串autop = &str[0]...
深入探讨C++中std::string类的成员函数c_str()和data()的区别,需要从历史角度出发。在过去,string类设计时并不强制内部存储以'\0'结尾的字符串,这与现代语言的设计趋势相悖。为此,在C++11标准发布之前,仅通过调用string::c_str()函数才能获取到以'\0'结尾的字符串。然而,C++11标准进行了改进...
在C++11版本中,c_str()与data()用法相同(Both string::data and string::c_str are synonyms and return the same value.) 2.2 计算string长度、string字符串比较 示例代码如下: 代码语言:javascript 复制 #include<string>#include<iostream>#defineHELLOSTR"Hello World"using namespace std;intmain(){string...
string::c_str()、string::c_data()的区别: const value_type *c_str( ) const; const value_type *data( ) const; data只是返回原始数据序列,没有保证会用traits::eos(),或者说'\0'来作字符串结束. 当然,可能多数实现都这样做了。 c_str是标准的做法,返回的char*, 一定指向一个合法的用'\0'终止...
对于c_str() data()函数,返回的数组都是由string本身拥有,千万不可修改其内容。其原因是许多string实现的时候采用了引用机制,也就是说,有可能几个string使用同一个字符存储空间。而且你不能使用sizeof(string)来查看其大小。详细的解释和实现查看Effective STL的条款15:小心string实现的多样性。
std::string的⽅法c_str()和data()有什么区别1、从C++标准上的解释来看,只有⼀点区别:c_str() 返回⼀个指向正规C字符串的指针常量,该指针保证指向⼀个 size() + 1 长度的空间,⽽且最后⼀个字符肯定是 \0 ;⽽ data() 返回的指针则保证指向⼀个size()长度的空间,不保证有没有null...
string类对象与char* string::c_str() string::data() string类对象与char* string类是c++引入的,引入之后,大大方便了对字符串进行各种操作,但c语言的大多数函数不支持string类型的参数,因此string引入了这个函数用于将string类型的对象转换为char* ...
标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。 c_str()是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址。换种说法,c_str()函数返回一个指向正规C字符串的常量指针(不是指针常量),内容与本string串相同。这是为了与C语言兼容,在C...