在 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*?

如何在 Swift 中将十六进制字符串转换为 CString?

如何在 C++ 中将数字转换为字符串,反之亦然

在 C++ 中将字符或字符串转换为位集

如何在 C++ 中将大数字符串转换为整数?

在 C++ 中将 Double 转换为字符串