void setVersion(char* buf, std::string version) {
buf = version;
}
我正在尝试将版本字符串写入buf,但上面的代码给了我这个错误“无法将'std :: string {aka std :: basic_string}'转换为'char *'的赋值”。< / p>
解决它的最简单方法是什么?
答案 0 :(得分:13)
假设buf
的大小至少为version.length() + 1
个字节:
strcpy(buf, version.c_str());
答案 1 :(得分:5)
首先,界面存在严重问题,因为您没有
知道buf
有多大。如果不知道这一点,你就没有办法
正确地写任何东西。如果你通过了长度,你可以做到
类似的东西:
void
setVersion( char* buffer, size_t size, std::string const& version )
{
size_t n = version.copy( buffer, size - 1 ); // leave room for final '\0'
buffer[ n ] = '\0';
}
另一种可能性是你的意图是设置一些全局性的 指针;给定的接口不能这样做,因为你有一个副本 指针,但是如果给你一个引用,你可以这样做:
void
setVersion( char*& buffer, std::string const& version )
{
if ( buffer != NULL ) {
delete [] buffer;
}
buffer = new char[ version.size() + 1 ];
size_t n = version.copy( buffer, std::string::npos );
buffer[ n ] = '\0';
}
(其他版本是可能的,但你必须复制字符串,以避免 终身问题。)
答案 2 :(得分:3)
确保buf有足够的空间来存储字符串
strcpy(buf,version.c_str())
答案 3 :(得分:2)
尝试在版本之后添加对c_str()
的调用:
void setVersion(char* buf, std::string version)
{
buf = version.c_str();
}
答案 4 :(得分:1)
如果你想要的只是std :: string的char * - 如前所述使用vesrion.c_str()。
如果你想将它复制到一个单独的缓冲区中 - 对于你使用过的函数签名 - 应该在调用函数之前分配缓冲区,并且应该与version.size()+ 1的大小相同。
否则您可以执行以下操作:
void setVersion ( char** out, std::string in ) {
*out = new char[in.size() + 1];
strcpy ( out, in.c_str() );
}
HTH