Try using streamDelimiter
with a Writer.Allocating
:
const std = @import("std");
pub fn main() !void {
var alloc = std.heap.DebugAllocator(.{}).init;
defer _ = alloc.deinit();
const gpa = alloc.allocator();
var buf: [1024 * 1024]u8 = undefined;
var reader = std.fs.File.stdin().reader(&buf);
var line_writer = std.Io.Writer.Allocating.init(gpa);
defer line_writer.deinit();
while (reader.interface.streamDelimiter(&line_writer.writer, '\n')) |_| {
const line = line_writer.written();
std.debug.print("{s}\n", .{line});
line_writer.clearRetainingCapacity(); // empty the line buffer
reader.interface.toss(1); // skip the newline
} else |err| if (err != error.EndOfStream) return err;
}