data()和c_str()都是用来获取底层字符串的首地址的,但是在C++98中规定的是data()返回的字符串不保证有结尾\0,但是c_str()返回的字符串保证有结尾\0,也就是C++98标准在设计字符串的时候是想抛弃C风格的字符串语法的,但是在实际应用中,往往需要将C++的string转换为C风格的字符串const char*。 这一点平常使用...
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::c_str()的工作,但从C++11开始,data()也提供了它,为什么将c_str()的空终止字符添加到了std::string::data()中?对我来说,这似乎是浪费CPU周期,如果空终止字符根本不相关,只使用data(),那么C++03编译器就不必关心终止符号,而且每次重新调整字符串大小时都不必写0到终止符号,但是C++11编...
1. string.datausing namesapce std; string str = "hello world"; const char *p = str.data(); printf(p); //==> // hello world2. string.c_strstring str = "hello world"; const char *p = str.c_str(); printf(p); //==> // hello world3. string.copy...
std::string str = "std::string to const char*"; char const *c = str.data(); std::cout << c; return 0; } 下载 运行代码 输出: std::string to const char* 3.使用C++11的连续存储 我们知道 C++11 保证 std::string的内存分配是连续的。所以,我们可以得到一个指向底层的指针 char[] 后面...
1.data()以字符数组的形式返回字符串内容。由于并未追加’\0’字符,所以返回型别并非有效的C-String. 2.c_str()以C_String形式返回字符串内容,也就是在尾端添加’\0’字符。 3.copy()将字符串内容复制到“调用者提供的字符数组“中。不添加’\0’字符。
std::cout<<c; return0; } 下载运行代码 输出: std::string to char* 2.使用strcpy()功能 在这里,想法是通过const char*由返回string::c_str或者string::data的功能strcpy()函数,它在内部将其复制到指定的字符数组中并返回一个指针。 1 2 3
使用string的数据成员data(): 除了c_str()函数之外,您还可以使用string的data()成员函数来获取指向字符串的指针。以下是如何使用data()函数的示例: 代码语言:cpp 复制 #include<iostream>#include<string>intmain(){std::string str="Hello, World!";constchar*cstr=str.data();std::cout<<"std::str...