我目前正在從windows計算機接收數據到具有以下實現的linux系統。它在我的文件,有時讀取數據並將其寫入文件將從套接字接收的數據寫入C++文件
char buffer[4096];
int BUFSIZE=4096;
std::ofstream file(INPUT_PS_FILE_NAME, std::ios::out|std::ios::binary);
while (bytes_read > 0)
{
buffer[bytes_read] = 0;
bytes_read = recv(newsockfd, buffer, BUFSIZE - 1, 0);
if(bytes_read>0) {
file.write(buffer,BUFSIZE-1);
printf("Buffer: %s\n", buffer);
}
}
現在有時在我的文件,我會得到一大堆的「\ 00 \ 00 \ 00 \ 00 \ 00 ......」其罰款,但從來沒有在機器的控制檯上。我的理解是發生這種情況,因爲printf
當傳遞一個數組將打印一個數組的所有內容,直到它遇到一個空字符file.write
沒有。如果我的理解是正確的,請告訴我。此外,爲了解決這個問題有沒有辦法讓我file.write
行爲像printf它只打印,直到找到NULL終止?
那麼,它會寫什麼你回來在緩衝區中。 – OldProgrammer
我不想打印\ 0 \ 0 – MistyD
你不應該寫比你讀的更多的字節,你應該使用'file.write(buffer,bytes_read)' – mpromonet