コードの仕組みを理解したら、C++に翻訳したいと思います。コードをPythonからC++に翻訳する
オリジナルのPythonコード:
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;
}
しかし、それは示しています:
def recv_all_until(s, crlf):
data = ""
while data[-len(crlf):] != crlf:
data += s.recv(1)
return data
は、ここに私が試したものだ
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr
私は問題があるためwhile
ループ内であることを理解します最初はデータ文字列は空です。では、Pythonで動作するようにこれを改善する方法は?ありがとうございました。
、Pythonの文字列は作る方法 'endswith'を持っていますあなたのwhileループの意図はもっとはっきりしています: 'not data.endswith(crlf)'。そのことを念頭に置いて、[このSO答え](http://stackoverflow.com/a/2072890/4859885)は非常に洗練されたソリューションを提供します。 –