将const char *转换为std::string

32

我从一个处理函数中收到了一个const char *,我希望将其转换/分配给std::string的实例以进行进一步操作。这似乎应该很简单,但是我没有找到任何说明如何完成此操作的文档。显然,我缺少某些东西。感谢您的见解。


8
这是构造函数选项之一,std::string(const char* cstr) - aruisdante
std::string s = f(); - Alan Stokes
这个问题是由于一个无法再现或简单的排版错误引起的。虽然类似的问题可能在这里是相关的,但这个问题已经以一种不太可能帮助未来读者的方式解决了。在发布之前,通过识别和仔细检查重现问题所必需的最短程序,通常可以避免这种情况。 - πάντα ῥεῖ
哇,-5分。我觉得这不是一个很糟糕的问题...好吧。 - Justin Fletcher
1
+1:是的,对于这个问题给出-9分有点荒谬。另一个问题稍微有些不同,因为它有一个长度要求,可能对很多人来说并不相关。 - User
5个回答

63

std::string可以从const char *类型的参数构造。这意味着以下写法是合法的:

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

7
请确保您的char*指针不为NULL,否则行为将是未定义的。 - Trevor Hickey

22

尝试

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

能解决问题。


1
我觉得很有趣,我们选择了相同的示例字符串,而且变量名也几乎一样(只是交换了一下)。 - Ivaylo Strandjev
1
请确保你的 char * 不是NULL,否则行为将是未定义的。 - Trevor Hickey
它将如何变成null? - Ed Heal
3
@EdHeal,虽然你的示例中没有出现,但是一般情况下char*可能会用到。我为其他人留下免责声明。例如,我正在使用getenv()函数。如果环境变量不存在,它将返回null。在构造该函数返回值的字符串之前需要进行检查。这很重要,因为OP说他们“从一个处理函数得到了一个const char *”。 - Trevor Hickey

4
你有很多选择:
const char* dosth() { return "hey"; }

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

实时演示文档

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


请添加一条注释,说明其中一些示例需要使用c++11。 - Ivaylo Strandjev
1
请确保您的 char* 不是 NULL,否则其行为将是不确定的。 - Trevor Hickey

3

std::string有一个构造函数,可以隐式地将const char*转换为字符串。在大多数情况下,您无需进行任何操作。只需在接受std::string的位置传递const char*即可正常工作。


请确保您的 char * 不是 NULL,否则行为未定义。 - Trevor Hickey

3
有三种可能性。你可以使用构造函数、赋值运算符或成员函数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,否则行为未定义。 - Trevor Hickey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接