将std :: string存储为字符数组

时间:2017-04-03 19:08:36

标签: c++ string c++11 c-strings

我试图将std::string转换为c字符串(我的实际问题更接近this;我正在尝试解决方法)。

  1. 如何将std::string存储为字符数组?
  2. 为什么std :: string.data()和std :: string.c_str()会返回char [(<anonymous> + 1)]而不是预期的const char*?或者我是否混淆了这些,如果是这样,我如何使用这些类型?

    #include <string>
    #include <iostream>
    
    int main()
    {
      std::string sstring = "I'm an std string!";
    
      char cstring[sstring.size()];
    
      cstring = sstring.c_str();
      std::cout << std::string(sstring.c_str());
    
      return 0;
    }
    
  3. 编译结果

    scratch.cpp:10:11: error: incompatible types in assignment of ‘const char*’ to ‘char [(<anonymous> + 1)]’
    

    我无法找到相关的,已存在的问题。

3 个答案:

答案 0 :(得分:3)

只需使用const char *

即可
  std::string sstring = "I'm an std string!";

  const char * cstring = sstring.c_str();

  std::cout << cstring << std::endl;

答案 1 :(得分:1)

正如评论中所提到的,这听起来就像一个XY问题。但是如果你只是想复制字符串,你可以这样做:

char cstring[sstring.size() + 1];
strcpy(cstring, sstring.c_str());

请注意,VLA不是C ++的一部分,但g ++会“随之而来”,请参阅答案here

答案 2 :(得分:-3)

将字符串分配给char数组的工作方式如下:

#include <iostream>
#include <string>

int main(int argc, char **argv) {
  std::string s = "HELLO WORLD!";
  char *cs = (char *)s.c_str();

  std::cout << cs << '\n' << std::string(cs) << '\n';

  return 0;
}

输出:

CODE OUTPUT

这是有效的,因为它会将const char *转换为char *,因此允许分配通过,虽然这可能不是最简单的方法。