В настоящее время я получаю данные с компьютера 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