getline function
The GNU library provides the nonstandard
getline function that makes it easy to read lines
reliably:
#include <stdio.h> ssize_t getline(char **lineptr, size_t *n, FILE *stream);
This function reads an entire line from
stream, storing the text (including the newline and a
terminating null character) in a buffer and storing the buffer address in
*lineptr. Before calling getline, you should
place in *lineptr the address of a buffer *n
bytes long, allocated with malloc. If this buffer is long
enough to hold the line, getline stores the line in this
buffer. Otherwise, getline makes the buffer bigger using
realloc, storing the new buffer address back in
*lineptr and the increased size back in
*n.
When getline returns, *lineptr is a
char * which points to the text of the line. When
successful, it returns the number of characters read (including the
newline, but not including the terminating null); if an error occurs or
end of file is reached, getline returns -1.
When you have to read in a line of text from
the keyboard, do it with getline; you will avoid
future problems.
The following program demonstrates how to use
getline to read a line of text from the keyboard safely. Try
typing more than 10 characters. Notice that getline can
safely handle that line, no matter how long it is.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <stdio.h>
#define MAX_LENGTH 10
int main(void)
{
ssize_t bytes_read;
size_t bytes_number;
//size_t and ssize_t are unsigned int types.
char *string;
puts("Please enter a line of text:\n");
/* You can initialize the arguments by yourself: */
//bytes_number = MAX_LENGTH;
//string = (char *) malloc (bytes_number+ 1);
//bytes_read = getline(&string, &bytes_number, stdin);
/*Or let getline do it for you by setting the number to 0 and the string to NULL.*/
bytes_number = 0;
string = NULL;
bytes_read = getline(&string, &bytes_number, stdin);
if (bytes_read == -1)
{
puts("ERROR!");
}
else
{
puts("You typed:");
puts(string);
}
free(string)
return 0;
}
|
Check with these questions if you understood this document
Mark the WRONG sentence regarding the getline function: