将C风格字符串转换为C++风格字符串

18

请问有人能告诉我如何在C++程序中将C风格字符串(即char*)转换为C++风格字符串(即std::string)吗?

非常感谢。

4个回答

27

std::string 可以将 char * 作为 构造函数 参数,也可以通过多个操作符进行转换。

char * mystr = "asdf";
std::string mycppstr(mystr);

或者对于那些语言律师来说

const char * mystr = "asdf";
std::string mycppstr(mystr);

6
为什么所有人回复都使用了有缺陷(但标准允许)的char类型来表示字符串字面值,让我感到困惑。所有字符串字面值都是只读的,因此应该使用const char类型。std::string所获取的参数也是const char*类型。 - Tronic
如果我有一个存储在char变量中的C类型字符串,那么如何将其转换为C++风格的字符串,考虑到构造函数的参数应该是char const类型? - assassin
@assassin:你根本没有char,但是你的C类型字符串是char const。如果这是你的代码,你可以更改它,如果它在库中,你就不能更改了。 - Mathias Soeken
通过 char,我指的是我的 C 类型字符串是一个以 null 结尾的字符数组,由 char 指针指向(例如 John 上面的 char *mystr="asds")。那么,给定这个 std::string mycppstr(mystr) 语句会给我一个有效的转换吗? - assassin
是的,它是有效的。Tronic的观点绝对是正确的,但对于这个例子来说并不是非常实际重要的。 - John Weldon

10
char* cstr = //... some allocated C string

std::string str(cstr);

cstr的内容复制到str中。

这也可以用于操作,例如:

std::string concat = somestr + std::string(cstr);

其中somestr已经是`std::string`类型。


3
你可以利用接受char*参数的 类构造函数 来操作 string
char *str = "some c style string";
string obj(str);

1

另一种进行转换的方法是调用一个函数,该函数以const std::string&作为参数:

void foo(const std::string& str);

void bar()
{
    char* str= ...

    foo(str);
}

我认为在函数调用边界处进行转换更加整洁。


你是在说这里foo应该是一个空函数,调用该函数时str会被转换为const std :: string类型吗? - assassin
@assassin: 不好意思,foo() 是任何接受 const std::string& 的函数,它可以是你自己编写的。我的答案只是一种使用模式,当你有一个 c-string 并想要转换它时使用。 它也将代码部件分离,其中一个 c-string 生成自数据在 std::string 形式中使用的部分。 - quamrana

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