现在,当我了解代码的工作原理时,我想将其转换为C++。将代码从Python转换为C++
原来的Python代码:
def recv_all_until(s, crlf):
data = ""
while data[-len(crlf):] != crlf:
data += s.recv(1)
return data
这里是我的尝试:
std::string recv_all_until(int socket, std::string crlf)
{
std::string data = "";
char buffer[1];
memset(buffer, 0, 1);
while(data.substr(data.length()-2, data.length()) != crlf)
{
if ((recv(socket, buffer, 1, 0)) == 0)
{
if (errno != 0)
{
close(socket);
perror("recv");
exit(1);
}
}
data = data + std::string(buffer);
memset(buffer, 0, 1);
}
return data;
}
但它显示:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr
据我所知,这个问题是while
循环,因为里面首先数据字符串是空的。那么如何改进它使它和Python一样工作呢?谢谢。
仅供参考,Python字符串有这使得该方法'endswith'你的while循环意图更清晰:'while data.endswith(crlf)'。考虑到这一点,[此SO回答](http://stackoverflow.com/a/2072890/4859885)为您提供了一个非常优雅的解决方案。 –