在 C++ 中将字符串转换为 Cstring
Posted
技术标签:
【中文标题】在 C++ 中将字符串转换为 Cstring【英文标题】:Converting String to Cstring in C++ 【发布时间】:2012-08-03 00:33:32 【问题描述】:我有一个字符串要转换,string = "apple"
,并想把它放入这种风格的 C 字符串 char *c
,它包含 a, p, p, l, e, '\0'
。我应该使用哪种预定义方法?
【问题讨论】:
std::string
有:string.c_str()
问:如何将 std::string 转换为 C 字符串?答:string.c_str() ;)
【参考方案1】:
.c_str()
返回一个const char*
。如果您需要可变版本,则需要自己制作副本。
【讨论】:
.data() 一样好,并且出于可读性目的而首选。 在 C++11 中,函数.data()
和 .c_str()
是同义词,但在 C++98 中 .data()
返回一个指针,该指针可能不会被空字符 \0
终止. .data
的“不能保证空字符终止返回值所指向的字符序列”【参考方案2】:
vector<char> toVector( const std::string& s )
string s = "apple";
vector<char> v(s.size()+1);
memcpy( &v.front(), s.c_str(), s.size() + 1 );
return v;
vector<char> v = toVector(std::string("apple"));
// what you were looking for (mutable)
char* c = v.data();
.c_str() 适用于不可变。矢量将为您管理内存。
【讨论】:
【参考方案3】:string name;
char *c_string;
getline(cin, name);
c_string = new char[name.length()];
for (int index = 0; index < name.length(); index++)
c_string[index] = name[index];
c_string[name.length()] = '\0';//add the null terminator at the end of
// the char array
我知道这不是预定义的方法,但认为它可能对某人有用。
【讨论】:
如果你想像这样添加一个 0 终止符,c_string 太短了一个字节以上是关于在 C++ 中将字符串转换为 Cstring的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中将 Cstring 转换为 TCHAR*?