std::string怎么转为char*
时间: 2023-11-15 21:05:18 浏览: 85
可以通过以下两种方式将std::string转换为char*:
1. 使用c_str()函数
可以使用std::string的c_str()函数将字符串转换为指向char类型的指针,示例代码如下:
```
std::string str = "Hello, world!";
char* char_array = &str[0];
```
这样就可以把std::string对象转换为指向char类型的指针char_array。
需要注意的是,由于c_str()函数返回的指针指向的是std::string对象内部的字符数组,因此在使用该指针时,需要保证std::string对象的生命周期大于等于使用该指针的生命周期,否则会导致未定义行为。
2. 使用strcpy()函数
另一种方式是使用strcpy()函数,该函数可以将一个字符串复制到另一个字符数组中,示例代码如下:
```
std::string str = "Hello, world!";
char char_array[str.size() + 1];
strcpy(char_array, str.c_str());
```
这样就可以把std::string对象转换为字符数组char_array。
需要注意的是,由于字符数组char_array的大小要比std::string对象的长度大1,因为strcpy()函数会在字符数组的末尾添加一个null字符('\0')。
相关问题
修改好程序报错warning C4786: 'std::reverse_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std::allocator<
这个警告是因为在 `copy` 函数中使用了 `reverse_iterator`,而这个类的名称比较长,超过了编译器的警告阈值,所以会出现这个警告。不过这个警告并不会导致程序运行错误,只是提示代码可读性不够好。
如果想要消除这个警告,可以尝试将 `reverse_iterator` 替换为 `const_iterator`,例如将:
```c++
copy(dictionary.rbegin(), dictionary.rend(), ostream_iterator<string>(ofs, "\n"));
```
替换为:
```c++
copy(dictionary.begin(), dictionary.end(), ostream_iterator<string>(ofs, "\n"));
```
这样就可以消除这个警告了。
std::string 如何转为const char *
可以使用std::string的c_str()成员函数将std::string转换为const char *类型。例如:
```c++
#include <iostream>
#include <string>
int main()
{
std::string s = "hello world";
const char *c_str = s.c_str(); // 将string类型转换为const char *类型
std::cout << c_str << std::endl;
return 0;
}
```
输出:
```
hello world
```
需要注意的是,c_str()函数返回的const char *指针指向的是std::string对象内部的字符数组,因此当std::string对象被销毁时,指针指向的字符数组也会被销毁。在使用c_str()函数返回的指针时,需要确保std::string对象的生命周期足够长,否则可能会出现未定义的行为。
阅读全文