【问题标题】:bind a char* to a string将 char* 绑定到字符串
【发布时间】:2015-03-19 14:58:51
【问题描述】:

我想将一个字符绑定到一个字符串,但我不知道该怎么做: 这个想法是我有一个函数 void f(char mychar)* 来更新 mychar 的值。我想将此更新传递给一个字符串。

代码必须如下所示:

char* mychar = new char[128];

string mystring;

\\bind mystring with mychar
.....

f(mychar);

std::cout << mychar << std::endl ;
std::cout << mystring << std::endl

并且mychar和mystring返回的值必须相同。

有什么想法吗?

非常感谢。

【问题讨论】:

    标签: c++ string bind c-strings


    【解决方案1】:

    字符串可以更改其内部缓冲区,因此即使您可以创建使用特定缓冲区的字符串,在常见突变之后,它也可能具有不同的后备缓冲区。

    例如,它可以根据string::reserve(...) 调用重新分配缓冲区。

    string::c_str

    返回的指针指向字符串对象当前用来存储符合其值的字符的内部数组。

    string::datastring::c_str 都是同义词,返回相同的值。

    返回的指针可能会因进一步调用对修改对象的其他成员函数而失效。

    C++98 的注释有这个警告

    程序不得更改此序列中的任何字符。

    您似乎希望f(mychar) 这样做。

    【讨论】:

      【解决方案2】:

      您需要先初始化mychar。那么剩下的就简单了:

      char* mychar = new char[128];
      mychar[0] = 'A';
      mychar[1] = '\0';
      std::string mystring(mychar);
      
      std::cout << mychar << std::endl;
      std::cout << mystring << std::endl;
      

      编辑:但我刚刚意识到这并不能回答您的问题,此代码仅有助于初始化。请参阅@Mike 的回答。

      【讨论】:

        【解决方案3】:

        我是否理解正确,您只是希望两个变量引用相同的字符串? 如果这应该工作:

        string mystring;
        char* mychar = mystring.data();
        

        data 方法返回一个指向字符串数据的指针,它只是字符的起始地址 -> 一个 char*。

        问候

        【讨论】:

        • 这行不通。如果将字符添加到现有字符串,它可能会重新分配内部指针,当字符串足够大时它会这样做。此外,数据成员函数返回不能分配给 char* 的 const char*。
        猜你喜欢
        • 2013-02-18
        • 1970-01-01
        • 2015-09-27
        • 2016-11-28
        • 1970-01-01
        • 1970-01-01
        • 2019-06-21
        • 2016-03-03
        • 2015-10-27
        相关资源
        最近更新 更多