Dies ist mein Code ..Die Ergebnisse sind unterschiedlich; recv (Socke, buf, sizeof (buf), 0) und strlen (buf) in C++
char buf[5000];
bool isHandshaking = false;
bool isSingaling = false;
while(1)
{
//-----------클라이언트로부터 수신------------
int recvsize = recv(sock,buf,sizeof(buf),0);
printf("recvsize = %d\n",recvsize);
buf[recvsize] = '\0';
printf("buf_len = %d\n",strlen(buf));
.
.
.
}
Das obige Ergebnis ...
recvsize = 2525
buf_len = 126 /*(or different value, sometimes 2525)*/
Wert von recvsize ist alaways 2525 Und ich erwartete, dass der strlen Wert von buf natürlich recvsize gleich wäre. Jedoch ist bufsize manchmal gleich 2525, aber manchmal ist es nicht das selbe. Was fehlt mir?
Wussten Sie, dass [std :: strlen] (http://en.cppreference.com/w/cpp/string/byte/strlen) bis zum ersten "\" zählt? – Galik
Was @Galik sagt ist, dass 'recvsize' die Anzahl der Bytes ist, die auf dem Socket empfangen werden. Ein String ist jedoch ein Array von Zeichen, und das Array von Bytes geht nun von einer String-Semantik und nicht von einer Byte-Array-Semantik aus, wenn es an 'strlen()' übergeben wird. So gibt 'strlen()' die Anzahl der Zeichen zurück, die vom Startpunkt bis zum Ende der Zeichenfolge oder dem Wert 0 gefunden wurden. Um festzustellen, ob dies tatsächlich der Fall ist, können Sie überprüfen, ob das Zeichen nach der von 'strlen()' zurückgegebenen Länge eine Null ist oder nicht. –