Learning C: K&R 1-22: 'fold'. Is this solution very unwieldy?
Instead of reading an entire line, then finding where to break the line, I think I'd read one word, and depending on the length of the line up to that point and the length of the word, decide whether or not to write a new-line before writing that word.

That way, the main loop would come out something like this:

while (getword(buffer, max_len)!=EOF) {
    if (current_length + strlen(buffer) &gt; max_len) {
       print("\n");
       current_length = 0;
    }
    print(buffer);
    current_length += strlen(buffer);
}