我在C++中有一個客戶端/服務器應用程序。服務器向客戶端發送一個相當大的文件(27KB)。客戶端從套接字中讀取1024字節的固定長度,然後將其連接到一個字符串。但是,當我使用+ =運算符時,它似乎沒有分配超過4048個字節,並且最終在客戶端有一個4KB文件。C++字符串不重新分配
客戶代碼:
#define BUFFER_SIZE 1024
string outStr="";
char buf[BUFFER_SIZE];
while(1){
int numread;
if ((numread = read(clientSocket, buf, sizeof(buf) -1)) == -1){
fprintf(stderr,"Error: reading from socket");
exit(1);
}
fprintf(stderr,"received answer with numread: %d\n",numread);
if (numread == 0){
break;
}
buf[numread] = '\0';
outStr+=buf;
}
fprintf(stderr,"Transmission is over with total length: %d\n",outStr.length());
輸出I得到的是:
26倍:
received answer with numread: 1023
,之後:
received answer with numread: 246
received answer with numread: 0
transmission is over with total length: 4048
輸出確認整個文件是t傳遞,但串聯不會讓我追加4048的(系統限制?)。但是,當內容需要更大時,C++字符串應自動重新分配其內存。那麼爲什麼會這樣呢?
謝謝你的回答。
只要把調試'fprintf中(錯誤, 「傳輸完畢,總長度:%d \ n」,outStr.length());'在'outStr + = buf'後面,看看「字符串」是如何增長的......你可能會看到一些完全出乎意料的東西。 – Ped7g