将C ++字符串写入char *

Write C++ string into char*

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Convert std::string to const char* or char*

1
2
3
void setVersion(char* buf, std::string version) {
  buf = version;
}

STD:我试图将版本字符串写入BUF,但是上面的代码给了我这个错误:"不能转换"STD::字符串{AKSTD::Basic字符串}到"赋值"。

最简单的修复方法是什么?


假设buf的大小至少为version.length() + 1字节:

1
strcpy(buf, version.c_str());


首先,接口有一个严重的问题,因为您没有知道buf有多大。不知道这一点,你就没有办法正确地写任何东西。如果你通过了长度,你可以类似:

1
2
3
4
5
6
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';
}

另一种可能性是,你的目的是在全球范围内指针;给定的接口不能这样做,因为您有指针,但如果给您一个对它的引用,则可以执行以下操作:

1
2
3
4
5
6
7
8
9
10
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';
}

(其他版本是可能的,但您必须复制字符串,以避免终身问题。)


确保buf有足够的空间存储字符串

1
strcpy(buf,version.c_str())

尝试在以下版本之后添加对c_str()的调用:

1
2
3
4
void setVersion(char* buf, std::string version)
{
  buf = version.c_str();
}


如果你想要的是STD::字符串——正如前面指出的,使用VistRon .cString()。

如果您确实想将其复制到单独的缓冲区-对于您使用的函数签名-应该在调用函数之前分配缓冲区,并且缓冲区的大小应该与version.size()+1相同。

否则,您可以执行以下操作:

1
2
3
4
void setVersion ( char** out, std::string in ) {
    *out = new char[in.size() + 1];
    strcpy ( out, in.c_str() );
}

高温高压