2014-12-19 55 views
1

我正在使用Boost :: Asio库进行C++客户端/服务器TCP模拟器。从Streambuffer转换字符串中的垃圾打印

这里是我的代码部分:

客户:

std::string option; 
std::getline(std::cin, option); 
option.push_back('\r'); 
option.push_back('\n'); 
boost::asio::write(client_socket, boost::asio::buffer(option)); 

服务器:

boost::asio::streambuf received; 
boost::asio::read_until(socket, received, "\r\n"); 
char number[7]; 
recieved.sgetn(number, 7); 
std::cout << "The entered number is: " << number << std::endl; 

(我只包括了有问题的代码)

我的问题是垃圾值都包含在char[] number中,像这样用于输入1234567

enter image description here

我怎样才能解决这个问题?

+0

你应该使用字符串来存储数量和使用来自'read_until'的返回值读取的字节数调整其大小。那么你不必处理所有的'\ 0'废话。 – Borgleader

回答

6

你必须null来终止你的字符串,这不是由你完成的。

char number[7]; //you need additional allocation for '\0' 

使用

char number[8]; 
+0

正如我在我的帖子中所说,这将是一个简单的错误。 非常感谢您回答我! 我对sgetn过于自信,我没有看到更容易的事情! – SpykeRel04D

1
char number[8]; 

recieved.sgetn(number, 7); 

number[7] = '\0' 
+0

不'sgetn()'包含空终止? – Dinal24

+0

我真的不知道,但我认为他需要通过的字符数。 – LPs

+0

正如我在我的帖子中所说,这将是一个简单的错误。 非常感谢您回答我! 我对sgetn过于自信,我没有看到更容易的事情! – SpykeRel04D