【问题标题】:How concatenate a string and a const char?如何连接字符串和 const char?
【发布时间】:2012-04-20 13:28:37
【问题描述】:

我需要在 c 中输入“hello world”。 我该怎么做?

string a = "hello ";
const char *b = "world";

const char *C;

【问题讨论】:

    标签: c++ string


    【解决方案1】:
    string a = "hello ";
    const char *b = "world";
    a += b;
    const char *C = a.c_str();
    

    或者不修改a:

    string a = "hello ";
    const char *b = "world";
    string c = a + b;
    const char *C = c.c_str();
    

    少量编辑,以匹配 111111 给出的信息量。

    当您已经拥有strings(或const char *s,但我建议将后者转换为前者)时,您可以将它们“相加”以形成更长的字符串。但是,如果你想附加的不仅仅是你已经拥有的字符串,你可以使用stringstream,它是operator<<,它的工作原理与cout的完全相同,但不会将文本打印到标准输出(即控制台),但对于它的内部缓冲区,您可以使用它的.str() 方法从中获取std::string

    std::string::c_str() 函数返回指向其中包含的字符串的const char 缓冲区(即const char *)的指针,该字符串以空值结尾。然后,您可以将其用作任何其他 const char * 变量。

    【讨论】:

    • 更好的方法是const char *C = (a + b).c_str();。它不会修改string a
    • (a + b).c_str() 将使C 指向无效的内存,因为+ 创建了一个临时的string,它将超出范围并在语句完成时被破坏。将(a + b).c_str() 传递给函数参数时这很好,但将其分配给变量时则不行。
    • @RemyLebeau,谢谢,很好 - 我只是盲目地将该评论纳入答案。
    【解决方案2】:

    如果您只需要连接,请使用 operator +operator += 函数

     #include <string>
     ///...
     std::string str="foo";
     std::string str2=str+" bar";
     str+="bar";
    

    但是,如果您有很多连接要做,那么您可以使用字符串流

    #include <sstream>
    //...
    std::string str1="hello";
    std::stringstream ss;
    ss << str1 << "foo" << ' ' << "bar" << 1234;
    std::string str=ss.str();
    

    编辑:然后您可以将字符串传递给 C 函数,该函数采用 const char *c_str()

    my_c_func(str1.c_str());
    

    如果 C 函数采用非 const char * 或需要所有权,您可以执行以下操作

    char *cp=std::malloc(str1.size()+1);
    std::copy(str1.begin(), str2.end(), cp);
    cp[str1.size()]='\0';
    

    【讨论】:

    • 您没有看到问题的“...put [...] in C”部分。
    • @Griwes 我加了一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多