将 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++ 样式字符串的主要内容,如果未能解决你的问题,请参考以下文章