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

Converting String to Cstring in C++

本文关键字:转换 Cstring 字符串 C++      更新时间:2023-10-16

我有一个要转换的字符串string = "apple",并希望将其放入一个包含{a, p, p, l, e, ''}的这种风格的C字符串char *c中。我应该使用哪种预定义的方法?

.c_str()返回一个const char*。如果您需要一个可变版本,则需要自己生成一个副本。

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()适用于不可变。矢量将为您管理内存。

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()] = '';//add the null terminator at the end of
                              // the char array

我知道这不是预先定义的方法,但我认为它可能对某些人有用。

您可以通过两个步骤来完成。

  1. 转换字符串->const char*

  2. const char*->C字符串

string st = "my str";
const char* stBuf = st.c_str();   // 1. string to const char *
size_t sz;                          // save converted string's length + 1
wchar_t output[50] = L"";          // return data, result is CString data
mbstowcs_s(&sz, output,  50, stBuf, 50); // converting function
CString cst = output;

简单明了:

size_t copyString2CString(char* cstr, const std::string& str, const size_t maxSize)
{
    const char* data = str.c_str();
    size_t copySize = str.size();
    if (maxSize == 0) return maxSize; // Honestly?
    if (!cstr) return 0; // Honestly???
    // Mind your termination character
    if (copySize + 1 > maxSize) copySize = maxSize - 1;
    memcpy(cstr, data, copySize);
    cstr[copySize] = ''; // Again: Mind your termination character
    return copySize;
}

str的内容复制到cstr,并注意终止字符。您应该通过参数maxSize提供cstr的最大大小。

不要忘记#include <cstring>。复制快乐!