我正在按照此代码进行修剪
std::string tcp_read(int listen_at_port=8001){
using namespace std;
using namespace boost::algorithm;
std::vector<char> received_data(512);
tcp_read(received_data, listen_at_port);
string str1(received_data.begin(),received_data.end());
trim_right(str1);
return str1;
}
Run Code Online (Sandbox Code Playgroud)
我逐步完成了代码,我的received_data通常="添加8002(此处缓冲区填充空格直到[511th]位置")
现在当我做了trim_right时,我预计str1的大小会变为8,但是当它返回时仍然是512,为什么?
我如何实际修剪并更改大小,以便字符串可以容纳到最后一个非空格字符
正如另一个答案中所解释的,您的内容vector填充了零,这些零不被视为空格,因此trim_right不会从字符串中删除它们。解决问题的一个简单方法是不使用向量的开始和结束迭代器构造字符串,而是使用string( char const * )构造函数。这也消除了对 的调用boost::trim_right。
std::string tcp_read(int listen_at_port=8001)
{
using namespace std;
std::vector<char> received_data(512);
tcp_read(received_data, listen_at_port);
return string( received_data.data() );
// or return string( &received_data[0] );
}
Run Code Online (Sandbox Code Playgroud)