我想将一个 std::string 转换为 char* 或 char[] 数据类型。
std::string str = "string";
char* chr = str;
结果是:“错误:无法将'std::string'转换为'char' ...”。
有哪些可用的方法可以解决这个问题?
面向对象编程风格中的转换
converter.hpp
class StringConverter {
public: static char * strToChar(std::string str);
};
converter.cpp
char * StringConverter::strToChar(std::string str)
{
return (char*)str.c_str();
}
用法
StringConverter::strToChar("converted string")
std::string str = "string";
std::string::iterator p=str.begin();
char* chr = &(*p);
祝您好运。
使用unique_ptr实现orlp的char* answer的安全版本:
std::string str = "string";
auto cstr = std::make_unique<char[]>(str.length() + 1);
strcpy(cstr.get(), str.c_str());
为了完整性,请不要忘记 std::string::copy()
。
std::string str = "string";
const size_t MAX = 80;
char chrs[MAX];
str.copy(chrs, MAX);
std::string::copy()
不会添加NUL终止符。如果需要在C字符串函数中确保有NUL终止符:
std::string str = "string";
const size_t MAX = 80;
char chrs[MAX];
memset(chrs, '\0', MAX);
str.copy(chrs, MAX-1);
另外,您可以使用向量来获取一个可写的char*,如下所示:
//this handles memory manipulations and is more convenient
string str;
vector <char> writable (str.begin (), str.end) ;
writable .push_back ('\0');
char* cstring = &writable[0] //or &*writable.begin ()
//Goodluck
char* result = strcpy((char*)malloc(str.length()+1), str.c_str());
std::string s;
std::cout<<"Enter the String";
std::getline(std::cin, s);
char *a=new char[s.size()+1];
a[s.size()]=0;
memcpy(a,s.c_str(),s.size());
std::cout<<a;
没人提到过sprintf吗?
std::string s;
char * c;
sprintf(c, "%s", s.c_str());