it-swarm.cn

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

我刚开始阅读C++并发现c ++具有丰富的字符串操作功能,C没有。我正在阅读这些函数并遇到c_str()并且从我的理解是c_str转换一个字符串,该字符串可能是空终止的,或者可能不是一个空终止字符串。这是真的吗?

任何人都可以建议我一些例子,以便我可以理解使用 c_str function ??

52
Amit Singh Tomar

c_str返回指向以空字符结尾的字符串(即C样式字符串)的const char*。当你想将std::string的“内容”¹传递给期望使用C风格字符串的函数时,它非常有用。

例如,请考虑以下代码:

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(与C字符串不同)可以包含\0字符。如果是这样,接收到c_str()的返回值的代码将被误认为字符串比实际更短,因为它会将\0解释为字符串的结尾。

70
Jon

在C++中,您将字符串定义为

std::string MyString;

代替

char MyString[20];

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

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

现在有一个问题。您正在使用C++,并且您正在使用std::string字符串变量。但是这个C函数要求一个C字符串。如何将std::string转换为标准C字符串?

像这样:

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

这就是c_str()的用途。

请注意,对于std::wstring字符串,c_str()返回const w_char *

42
hkBattousai

大多数OLD c ++和c函数在处理字符串时都使用const char*
使用STL和std::string,引入了string.c_str(),以便能够从std::string转换为const char*

这意味着如果您保证不更改缓冲区,您将能够使用只读字符串内容。 PROMISE = const char *

6
Daniel Mošmondor

在C/C++编程中,有两种类型的字符串:C字符串和标准字符串。使用<string>标头,我们可以使用标准字符串。另一方面,C字符串只是一个普通字符数组。因此,为了将标准字符串转换为C字符串,我们使用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
2
Linkon Ruhul

c_str()将C++字符串转换为C样式的字符串,该字符串本质上是一个以空字符结尾的字节数组。当您想要将C++字符串传递给需要C样式字符串的函数(例如,许多Win32 API,POSIX样式函数等)时,可以使用它。

2
CadentOrange

它用于使std::string与需要空终止char*的C代码互操作。

2
pmr