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

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

非常感谢。

【问题讨论】:

    标签: c++ c-strings


    【解决方案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 的形式使用数据的部分分开。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-28
        • 1970-01-01
        • 2015-01-13
        • 1970-01-01
        • 2011-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多