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]...
std::string的⽅法c_str()和data()有什么区别1、从C++标准上的解释来看,只有⼀点区别:c_str() 返回⼀个指向正规C字符串的指针常量,该指针保证指向⼀个 size() + 1 长度的空间,⽽且最后⼀个字符肯定是 \0 ;⽽ data() 返回的指针则保证指向⼀个size()长度的空间,不保证有没有null...
1、从C++标准上的解释来看,只有一点区别: c_str() 返回一个指向正规C字符串的指针常量,该指针保证指向一个 size() + 1 长度的空间,而且最后一个字符肯定是 \0 ; 而data() 返回的指针则保证指向一个size()长度的空间,不保证有没有null-terminate,可能有,可能没有,看库的实现了。 2、有的STL的实现中,...
深入探讨C++中std::string类的成员函数c_str()和data()的区别,需要从历史角度出发。在过去,string类设计时并不强制内部存储以'\0'结尾的字符串,这与现代语言的设计趋势相悖。为此,在C++11标准发布之前,仅通过调用string::c_str()函数才能获取到以'\0'结尾的字符串。然而,C++11标准进行了改进...
std::string 有两个方法:data() 和 c_str(),都是返回该字符串的const char类型,那如何转换成非const的char呢? 下面展示三种方法: 强转:char* char_test = (char*)test.c_str(); 使用string的地址:char* charPointer = &test[0]; 使用const_cast转换:char* charCast = const_cast<char*>(test.c_...
c_str()anddata()perform the same function. (since C++ 11)所以在这之后两个函数效果相同。事实上...
以前这是std::string::c_str()的工作,但从C++11开始,data()也提供了它,为什么将c_str()的空终止字符添加到了std::string::data()中?对我来说,这似乎是浪费CPU周期,如果空终止字符根本不相关,只使用data(),那么C++03编译器就不必关心终止符号,而且每次重新调整字符串大小时都不必写0到终止符号,但是C++11编...
2.c_str()以C_String形式返回字符串内容,也就是在尾端添加’\0’字符。 3.copy()将字符串内容复制到“调用者提供的字符数组“中。不添加’\0’字符。 注意,data()和c_str()返回的字符数组由该字符串拥有。也就是说调用者千万不可以修改它或释放其内存。请注意c_str()和data()的返回值有效期限在下一次...
const char *c = str.c_str(); std::cout << c; return 0; } 下載 運行代碼 輸出: std::string to const char* 2.使用 string::data 功能 我們也可以調用 string::data 函數std::string 得到的對象 const char*.此功能的工作方式與 string::c_str. 1 2 3 4 5 6 7 8 9 10 11 12 #...
std::string str="Hello";someFunction(str.data()); 需要注意的是,使用c_str()或data()函数传递给期望char*的函数后,确保在函数内部不会修改传递的字符串,以免导致未定义的行为。 使用std::string的拷贝构造函数:如果期望的函数接受一个char参数,并且会在函数内部修改传递的字符串,可以使用std::st...