c_str()函数的作用是什么?

xxb16uws  于 2023-02-07  发布在  其他
关注(0)|答案(8)|浏览(174)

我知道c_str将一个字符串(可能以空结尾,也可能不以空结尾)转换为一个以空结尾的字符串。
这是真的吗?你能给予一些例子吗?

o4tp2gmn

o4tp2gmn1#

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

b1uwtaje

b1uwtaje2#

当你对在两个程序之间传输的字符串对象进行编码/解码时,你会用到这个方法。
假设你用Base64在Python中编码一个数组,然后你想把它解码成C++,一旦你有了从Base64解码的字符串--用C++解码,为了把它恢复成一个浮点数组,你需要做的就是:

float arr[1024];
memcpy(arr, ur_string.c_str(), sizeof(float) * 1024);

我想这是很常见的用法。

djp7away

djp7away3#

const char* c_str() const;
它返回一个指向包含null-terminated sequence字符(即C字符串)的数组的指针,表示string对象的当前值。
此数组包含组成字符串对象值的相同字符序列,并在末尾添加一个额外的终止空字符(“\0”)。

std::string str = "hello";
std::cout << str;          // hello
printf("%s", str);         // ,²/☺
printf("%s", str.c_str()); // hello
bn31dyow

bn31dyow4#

c_str返回一个const char*,该const char*指向一个以空值结尾的字符串(即C样式字符串)。当你想把std::string的"contents" ¹传递给一个需要处理C样式字符串的函数时,它很有用。
例如,考虑以下代码:

std::string string("Hello, World!");
std::size_t pos1 = string.find_first_of('w');

std::size_t pos2 = static_cast<std::size_t>(std::strchr(string.c_str(), 'w') - string.c_str());

if (pos1 == pos2) {
    std::printf("Both ways give the same result.\n");
}
    • 一个月一次**

注:
¹这并不完全正确,因为std::string(与C字符串不同)可以包含\0字符,如果这样,接收c_str()返回值的代码将被愚弄,认为字符串比实际短,因为它将把\0解释为字符串的结尾。

iqxoj9l9

iqxoj9l95#

在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 *

a6b3iqyw

a6b3iqyw6#

大多数 * 旧 * C++和C函数在处理字符串时使用const char*
通过STLstd::string,引入了string.c_str(),以便能够从std::string转换为const char*
这意味着如果你保证不改变缓冲区,你就可以使用只读字符串内容。

fv2wmkja

fv2wmkja7#

在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
rsaldnfx

rsaldnfx8#

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

相关问题