I am learning to use getline in C programming and tried the codes from http://crasseux.com/books/ctutorial/getline.html
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int atgc, char *argv[])
{
int bytes_read = 1;
int nbytes = 10;
char *my_string;
my_string = (char *)malloc(nbytes+1);
puts("Please enter a line of text");
bytes_read = getline(&my_string, &nbytes, stdin);
if (bytes_read == -1)
{
puts ("ERROR!");
}
else
{
puts ("You typed:");
puts (my_string);
}
return 0;
}
However, the problem is that the compiler keeps returning errors of this: undefined reference to 'getline'. Could you please tell me what the problem is? Thank you!
I am using Win7 64bit + Eclipse Indigo + MinGW
The other answers have covered most of this, but there are several problems. First,
getline()
is not in the C standard library, but is a POSIX 2008 extension. Normally, it will be available with a POSIX-compatible compiler, as the macros _POSIX_C_SOURCE will be defined with the appropriate values. You possibly have an older compiler from beforegetline()
was standardized, in which case this is a GNU extension, and you must#define _GNU_SOURCE
before#include <stdio.h>
to enable it, and must be using a GNU-compatible compiler, such as gcc.Additionally,
nbytes
should have typesize_t
, notint
. On my system, at least, these are of different size, withsize_t
being longer, and using anint*
instead of asize_t*
can have grave consequences (and also doesn't compile with default gcc settings). See the getline manual page (http://linux.die.net/man/3/getline) for details.With that change made, your program compiles and runs fine on my system.
getline
isn't a standard function, you need to set a feature test macro to use it, according to my man page,for glibc 2.10 or later,
before that.
I am also using MinGW. I checked MinGW headers and
getline()
does not appear in any C header, it appears only in C++ headers. This means the C functiongetline()
does not exist in MinGW.