我目前正在从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