

#include <stdio.h> char *fgets(char *str, int n, FILE *f);
fgets reads a line of data or up to n-1 characters (whichever is
less) from the stream associated with the FILE object addressed by
f, and it stores the input in the area addressed by str. The area
must be large enough to contain n characters.
str addresses an array. For a stream accessed as text, characters are
read into the array until n-1 characters have been read, a complete line
of data have been read, or end of file has been reached.
For a stream accessed as binary, characters are read until a physical new-line
character is encountered, n-1 characters have been read, or end of file
has been reached.
fgets adds a null character ('\0') following the last character read
into the area addressed by str.
fgets returns str if successful. If end of file or an error
occurs, fgets returns NULL.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 10
main()
{
char *buffer;
int position;
puts("Please enter a long line of input.");
buffer = malloc(BUFSIZE);
if (!buffer) exit(EXIT_FAILURE);
*buffer = '0'; /* Initially buffer is empty. */
position = 0; /* Read into start of buffer. */
for (;;) {
/* Read new data to last part of buffer. */
if (!fgets(buffer+position, BUFSIZE, stdin)) break;
/* Stop reading if we've read the whole line. */
if (buffer[strlen(buffer)-1] == 'n') break;
/* Make the buffer bigger so we can read again. */
buffer = realloc(buffer, strlen(buffer)+BUFSIZE);
if (!buffer) exit(EXIT_FAILURE);
/* Start reading after the last input character. */
position = strlen(buffer);
}
if (ferror(stdin)) exit(EXIT_FAILURE);
if (!*buffer)
puts("There was no input data.");
else
printf("You entered a %d-character line:n%s",
strlen(buffer), buffer);
free(buffer);
exit(EXIT_SUCCESS);
}
afread, gets
Copyright (c) 1998 SAS Institute Inc. Cary, NC, USA. All rights reserved.