将 c 样式字符串转换为 c++ 样式字符串

Posted

技术标签:

【中文标题】将 c 样式字符串转换为 c++ 样式字符串【英文标题】:converting c style string to c++ style string 【发布时间】:2011-01-15 14:42:35 【问题描述】:

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

非常感谢。

【问题讨论】:

【参考方案1】:

std::string 可以将char * 作为constructor 参数,并通过多个运算符。

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

或语言律师

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

【讨论】:

我想知道为什么每个对此做出响应的人都使用有缺陷的(但标准允许的)char* 类型作为字符串文字。所有字符串文字都是只读的,因此应该使用 char const* 类型。 std::string 采用的参数也是 char const*. 所以如果我在 char* 变量中有 C 类型字符串,那么如果严格来说构造函数的参数应该是 char const* 类型,我该如何将其转换为 C++ 样式字符串?跨度> @assassin:你根本没有 char*,但你的 C 类型字符串是 char const*。如果是您的代码,您可以更改它,如果它在库中,则不能。 by char* 我的意思是我的 C 类型字符串是一个空终止字符数组,由 char* 指针指向(比如 char *mystr="asds"; 在上面 John 的示例中)。所以给定这是 std::string mycppstr(mystr);声明会给我一个有效的转换? 是的,它将是有效的。 Tronic 的观点是绝对正确的,但对于这个例子来说实际上并不重要。【参考方案2】:
char* cstr = //... some allocated C string

std::string str(cstr);

cstr的内容将被复制到str

这也可以用于以下操作:

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

其中somestr 已经是`std::string`

【讨论】:

【参考方案3】:

您可以使用string class constructor,它将char* 作为参数。

char *str = "some c style string";
string obj(str);

【讨论】:

【参考方案4】:

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

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

void bar()

    char* str= ...

    foo(str);

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

【讨论】:

你是说 foo 在这里应该是一个空函数,并且在调用该函数时 str 被转换为 const std::string 类型? @assassin:不,抱歉。 foo() 是任何带有const std::string& 的函数。它可能是你写的。我的回答只是一种使用模式,你有一个 c 字符串并想要转换它。它还将生成 c 字符串的代码部分与以 std::string 的形式使用数据的部分分开。

以上是关于将 c 样式字符串转换为 c++ 样式字符串的主要内容,如果未能解决你的问题,请参考以下文章

将 C 风格的字符串转换为 C++ std::string

C++ 是不是将 char 指针视为 c 样式字符串?

将 c 样式字符串与 c++ 字符串混合时进行优化

C++ 字符串和 char * c stype 字符串

我可以将 C++ 字符串传递给流样式的方法吗?

C++怎么把string 转换为char型数组