void setVersion(char* buf, std::string version) {
buf = version;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将版本字符串写入buf,但上面的代码给了我这个错误"无法将'std :: string {aka std :: basic_string}'转换为'char*'的赋值".
修复它的最简单方法是什么?
hmj*_*mjd 13
假设buf至少是version.length() + 1字节大小:
strcpy(buf, version.c_str());
Run Code Online (Sandbox Code Playgroud)
首先,界面存在严重问题,因为您不知道界面有多大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';
}
Run Code Online (Sandbox Code Playgroud)
另一种可能性是你的意图是设置一些全局指针; 给定的接口不能这样做,因为你有一个指针的副本,但如果给你一个引用,你可能会这样做:
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';
}
Run Code Online (Sandbox Code Playgroud)
(其他版本是可能的,但您必须复制字符串,以避免生命周期问题.)
| 归档时间: |
|
| 查看次数: |
7060 次 |
| 最近记录: |