什么是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::string
stringvariables。 但是这个C函数要求一个Cstring。 你如何将你的std::string
转换为标准的Cstring?
喜欢这个:
std::string MyString; // ... MyString = "Hello world!"; // ... IAmACFunction(5, 2.45f, MyString.c_str());
这是c_str()
的用途。
请注意,对于std::wstring
string, c_str()
返回一个const w_char *
。
当处理string时,大多数OLD c ++和c函数使用const char*
。
使用STL和std::string
, string.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