>>19
If you know roughly the format of a single row-element of data you're trying to buffer, you can safely use a stack-dynamic buffer that's about as big to store it. Why make it any bigger than necessary? For one-off shit, in case you're wrong.
Also, if you're dealing with data X bytes at a time, and X is a reasonably small number, and you don't have a ton of functions that call each other in sequence, or a ton of threads threads, to parse up to a ton of X-bytes of data at a time for whatever fucking reason, there is absolutely no need ever to malloc X bytes to temporarily hold it, at least in C. I have no idea why people still write code like
int *x = calloc(50, sizeof(int)); to store a fixed quantity of data in situations where
int x[50] would be fine.
Sometimes you find yourself in situations where, your data is structured in such a way that you can't really tell what is happening at pos X until you hit pos Y later on. When you have, say, files, and they're all rather small, and you only read one at a time, it makes sense to just malloc the whole thing in. When you have gigantic files, it makes sense to use the file stream to look ahead a bit manually. When you have huge streams of data coming from network traffic, it's time to start using resizing buffers.
My point is that it's not a useless concept that's merely used to demonstrate to script kiddies how to perform file input; like with everything, you use it when appropriate.