char concat to string返回错误的长度

时间:2015-05-12 14:12:29

标签: c++ string sockets byte

简单的c ++程序,它为字符串添加一个char字节。结果长度在输出中是错误的。

#include <iostream>
#include <string>

int main(){

   char x = 0x01;

   std::string test;
   test = x+"test";

   std::cout << "length: " << test.length() << std::endl;
   std::cout << "test: " << test << std::endl;
   return 0;
}

输出:

length: 3
test: est

我在字符串前面添加一个类型字节,因为我将通过套接字发送此数据,而另一方有一个需要知道要创建的对象类型的工厂。

2 个答案:

答案 0 :(得分:4)

1 + "test" = "est"  // 1 offset from test

所以你得到了正确答案。

+---+---+---+---+---+
| t | e | s | t | \0|
+---+---+---+---+---+
  +0  +1  +2  +3  +4

你想要的可能是:

std::string test;
test += x;
test += "test";

答案 1 :(得分:0)

您没有像您认为的那样将charstd::string连在一起。这是因为"test"实际上是文字const char*,因此当您向其添加x时,您只是在做指针算术。你可以替换

test = x + "test";

test = std::to_string(x) + "test";

然后是你的output will be

length: 5
test: 1test