【问题标题】:Converting a const char * to std::string [duplicate]将 const char * 转换为 std::string [重复]
【发布时间】:2014-06-09 19:55:39
【问题描述】:

我有一个从处理函数返回的const char *,我想将它转换/分配给std::string 的一个实例以便进一步操作。这似乎应该是直截了当的,但我无法找到任何说明应该如何完成的文档。显然,我错过了一些东西。感谢您的见解。

【问题讨论】:

  • 它是构造函数选项之一,std::string(const char* cstr)
  • std::string s = f();
  • 这个问题是由无法再复制的问题或简单的印刷错误引起的。虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能帮助未来的读者。这通常可以通过在发布之前确定并仔细检查重现问题所需的最短程序来避免。
  • 哇,-5。我不认为这是一个可怕的问题......哦,好吧。
  • +1:是的-9 这个问题有点荒谬。另一个问题略有不同,因为它的长度要求可能与许多人无关。

标签: c++ string char


【解决方案1】:

std::string有一个fromconst char *的构造函数。这意味着写是合法的:

const char* str="hello";
std::string s = str;

【讨论】:

  • 只要确保您的 char * 不为 NULL,否则行为未定义。
【解决方案2】:

试试

 const char * s = "hello";
 std::string str(s);

会成功的。

【讨论】:

  • 我觉得很有趣,我们选择了相同的示例字符串和几乎相同的(只是交换了)变量名 :-)
  • 只要确保您的 char * 不为 NULL,否则行为未定义。
  • 怎么会是空的?
  • @EdHeal 不在您的示例中,但通常可以使用 char* 。我要为其他人留下免责声明。例如,我正在使用 getenv() 函数。如果环境变量不存在,它将返回 null。在构造该函数返回值的字符串之前需要进行检查。这是相关的,因为 OP 说他们“得到了一个从处理函数返回的 const char *”。
【解决方案3】:

你有很多选择:

const char* dosth() { return "hey"; }

string s1 = dosth();
string s2 (dosth());
string s3 {dosth()};
auto   s4 = (string)dosth();

Live Demo, Documentation

请注意,s3s4 是 C++11 功能,如果您仍应使用旧的或不兼容的编译器,则必须使用其他选项之一。

【讨论】:

  • 请补充说明部分示例需要c++11
  • 只要确保您的 char * 不为 NULL,否则行为未定义。
【解决方案4】:

有三种可能。您可以使用构造函数、赋值运算符或成员函数assign(如果不考虑成员函数insert,虽然它也可以使用:))`

例如

#include <iostream>
#include <string>

const char * f() { return "Hello Fletch"; }

int main()
{
   std::string s1 = f();

   std::string s2;
   s2 = f();

   std::string s3;
   s3.assign( f() );

   std::cout << s1 << std::endl;
   std::cout << s2 << std::endl;
   std::cout << s3 << std::endl;
}

【讨论】:

  • 只要确保您的 char * 不为 NULL,否则行为未定义。
【解决方案5】:

std::string 有一个可以隐式转换const char* 的构造函数。在大多数情况下,您无需执行任何操作。只需传递一个const char*,其中一个std::string 被接受,它就会工作。

【讨论】:

  • 只要确保您的 char * 不为 NULL,否则行为未定义。
猜你喜欢
  • 2014-07-13
  • 2011-05-11
  • 2013-09-10
  • 2012-10-31
  • 2011-01-06
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多