我知道c_str将一个字符串(可能以空结尾,也可能不以空结尾)转换为一个以空结尾的字符串。这是真的吗?你能给予一些例子吗?
c_str
o4tp2gmn1#
它用于使std::string可与需要以空终止的char*的C代码互操作。
std::string
char*
b1uwtaje2#
当你对在两个程序之间传输的字符串对象进行编码/解码时,你会用到这个方法。假设你用Base64在Python中编码一个数组,然后你想把它解码成C++,一旦你有了从Base64解码的字符串--用C++解码,为了把它恢复成一个浮点数组,你需要做的就是:
float arr[1024]; memcpy(arr, ur_string.c_str(), sizeof(float) * 1024);
我想这是很常见的用法。
djp7away3#
const char* c_str() const;它返回一个指向包含null-terminated sequence字符(即C字符串)的数组的指针,表示string对象的当前值。此数组包含组成字符串对象值的相同字符序列,并在末尾添加一个额外的终止空字符(“\0”)。
const char* c_str() const;
std::string str = "hello"; std::cout << str; // hello printf("%s", str); // ,²/☺ printf("%s", str.c_str()); // hello
bn31dyow4#
c_str返回一个const char*,该const char*指向一个以空值结尾的字符串(即C样式字符串)。当你想把std::string的"contents" ¹传递给一个需要处理C样式字符串的函数时,它很有用。例如,考虑以下代码:
const char*
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解释为字符串的结尾。
\0
c_str()
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;
char MyString[20];
void IAmACFunction(int abc, float bcd, const char * cstring);
std::string MyString; // ... MyString = "Hello world!"; // ... IAmACFunction(5, 2.45f, MyString.c_str());
这就是c_str()的用途。注意,对于std::wstring字符串,c_str()返回一个const w_char *。
std::wstring
const w_char *
a6b3iqyw6#
大多数 * 旧 * C++和C函数在处理字符串时使用const char*。通过STL和std::string,引入了string.c_str(),以便能够从std::string转换为const char*。这意味着如果你保证不改变缓冲区,你就可以使用只读字符串内容。
string.c_str()
fv2wmkja7#
在C/C++编程中,有两种类型的字符串:C字符串和标准字符串。通过<string>头,我们可以使用标准字符串。另一方面,C字符串只是一个普通字符数组。因此,为了将标准字符串转换为C字符串,我们使用c_str()函数。例如
<string>
// 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
rsaldnfx8#
c_str()将一个C字符串转换成一个C风格的字符串,它本质上是一个以空结尾的字节数组,当你想将一个C字符串传递给一个需要C风格字符串的函数时(例如,很多Win32 API,POSIX风格的函数,等等),你可以使用它。
8条答案
按热度按时间o4tp2gmn1#
它用于使
std::string
可与需要以空终止的char*
的C代码互操作。b1uwtaje2#
当你对在两个程序之间传输的字符串对象进行编码/解码时,你会用到这个方法。
假设你用Base64在Python中编码一个数组,然后你想把它解码成C++,一旦你有了从Base64解码的字符串--用C++解码,为了把它恢复成一个浮点数组,你需要做的就是:
我想这是很常见的用法。
djp7away3#
const char* c_str() const;
它返回一个指向包含null-terminated sequence字符(即C字符串)的数组的指针,表示string对象的当前值。
此数组包含组成字符串对象值的相同字符序列,并在末尾添加一个额外的终止空字符(“\0”)。
bn31dyow4#
c_str
返回一个const char*
,该const char*
指向一个以空值结尾的字符串(即C样式字符串)。当你想把std::string
的"contents" ¹传递给一个需要处理C样式字符串的函数时,它很有用。例如,考虑以下代码:
注:
¹这并不完全正确,因为
std::string
(与C字符串不同)可以包含\0
字符,如果这样,接收c_str()
返回值的代码将被愚弄,认为字符串比实际短,因为它将把\0
解释为字符串的结尾。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字符串呢?就像这样:
这就是
c_str()
的用途。注意,对于
std::wstring
字符串,c_str()
返回一个const w_char *
。a6b3iqyw6#
大多数 * 旧 * C++和C函数在处理字符串时使用
const char*
。通过STL和
std::string
,引入了string.c_str()
,以便能够从std::string
转换为const char*
。这意味着如果你保证不改变缓冲区,你就可以使用只读字符串内容。
fv2wmkja7#
在C/C++编程中,有两种类型的字符串:C字符串和标准字符串。通过
<string>
头,我们可以使用标准字符串。另一方面,C字符串只是一个普通字符数组。因此,为了将标准字符串转换为C字符串,我们使用c_str()
函数。例如
并且输出将是,
rsaldnfx8#
c_str()将一个C字符串转换成一个C风格的字符串,它本质上是一个以空结尾的字节数组,当你想将一个C字符串传递给一个需要C风格字符串的函数时(例如,很多Win32 API,POSIX风格的函数,等等),你可以使用它。