Не «обрезать буфер при первом \ 0», ReadFile не возвращает строку с нулевым символом в конце.Он читает сырые байты.Вы должны обратить внимание на значение, возвращаемое через аргумент lpNumberOfBytesRead.Оно будет равно значению nNumberOfBytesToRead, которое вы передадите, пока не достигнете конца файла.
Теперь вы знаете, сколько допустимых байтов в буфере.Найдите в них первый байт '\ r' или '\ n', чтобы найти терминатор строки.Скопируйте диапазон байтов в строковый буфер, предоставленный вызывающей стороной, и верните.В следующий раз, когда вы прочитаете строку, начните с того места, где вы остановились ранее, после конца строки.Если вы не нашли терминатор строки, вам нужно скопировать байты в буфер и снова вызвать ReadFile (), чтобы прочитать больше байтов.Это делает код немного сложным, чтобы получить право, отличное упражнение в противном случае.