什么是c_str函数的使用在c + +中

我刚刚开始阅读C ++,发现C ++具有丰富的C函数所没有的string操作函数。 我正在阅读这些函数,并遇到了c_str()和我所知道的是c_str转换可能是空的string或可能不是以空字符结尾的string。是真的吗?

任何人都可以build议我一些例子,以便我能理解c_str函数的使用?

c_str返回一个const char* ,它指向一个以null结尾的string(即一个C风格的string)。 当你想将一个std::string的“contents”¹传递给一个需要使用C风格string的函数时,这是非常有用的。

例如,考虑这个代码:

 std::string str("Hello world!"); int pos1 = str.find_first_of('w'); int pos2 = strchr(str.c_str(), 'w') - str.c_str(); if (pos1 == pos2) { printf("Both ways give the same result.\n"); } 

看到它的行动

笔记:

¹这不是完全正确的,因为std::string (不像Cstring)可以包含\0字符。 如果是这样,接收c_str()的返回值的代码将被愚弄,认为该string比实际更短,因为它会将\0作为string的结尾。

在C ++中,你定义你的string为

std::string MyString;

代替

char MyString[20];

在编写C ++代码的时候,你会遇到一些需要Cstring作为参数的C函数。
如下所示:

void IAmACFunction(int abc, float bcd, const char * cstring);

现在有一个问题。 你正在使用C ++,你正在使用std::stringstringvariables。 但是这个C函数要求一个Cstring。 你如何将你的std::string转换为标准的Cstring?

喜欢这个:

 std::string MyString; // ... MyString = "Hello world!"; // ... IAmACFunction(5, 2.45f, MyString.c_str()); 

这是c_str()的用途。

请注意,对于std::wstringstring, c_str()返回一个const w_char *

当处理string时,大多数OLD c ++和c函数使用const char*
使用STL和std::stringstring.c_str()被引入能够从std::string转换为const char*

这意味着,如果您承诺不更改缓冲区,则可以使用只读string内容。 PROMISE = const char *

c_str()将C ++string转换为一个C型string,该string本质上是一个以NULL结尾的字节数组。 当你想要将C ++string传递给一个需要C风格string的函数(例如很多Win32 API,POSIX风格的函数等等)时,可以使用它。

它用于使std::string与需要以null结尾的char* C代码互操作。

在C / C ++编程中有两种types的string:Cstring和标准string。 使用<string>标题,我们可以使用标准string。 另一方面,Cstring只是一个普通字符的数组。 所以,为了将标准string转换为Cstring,我们使用c_str()函数。

例如

 // a string to a C-style string conversion// const char *cstr1 = str1.c_str(); cout<<"Operation: *cstr1 = str1.c_str()"<<endl; cout<<"The C-style string c_str1 is: "<<cstr1<<endl; cout<<"\nOperation: strlen(cstr1)"<<endl; cout<<"The length of C-style string str1 = "<<strlen(cstr1)<<endl; 

而输出将是,

 Operation: *cstr1 = str1.c_str() The C-style string c_str1 is: Testing the c_str Operation: strlen(cstr1) The length of C-style string str1 = 17