First, I consider calling fgets() again to continue reading a line to be an annoyance.
You shouldn't just blindly check the 1023rd element, of course: it might not have been written to at all. You'd check whether a newline exists in the string. Read again if necessary (how many times? Do you do this recursively each time a read happens without a newline?) And, of course, the last line of input might not contain a newline. I believe C89 allows for EOF to not be sticky, so you might be able to add in that little complication as well.
With all of this put together, I'm of the opinion that fgets() can be annoying. Non-standard functions like GNU's getline() (which is a fleshed-out version of your other examples) do make it pretty painless to read a line, but that doesn't change my opinion of fgets(). There's a trade-off, too (Should a line-reading function just keep blindly reading and resizing, potentially chewing up all available memory?) but I'm quite comfortable being annoyed with all solutions to a problem.