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字符串}到"赋值"。
最简单的修复方法是什么?
假设
1 | strcpy(buf, version.c_str()); |
首先,接口有一个严重的问题,因为您没有知道
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()) |
尝试在以下版本之后添加对
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() ); } |
高温高压