c中对’getline’的未定义引用

我正在学习在C编程中使用getline,并尝试了http://crasseux.com/books/ctutorial/getline.html中的代码

#include  #include  #include  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; } 

但是,问题是编译器不断返回错误: 未定义的引用’getline’ 。 你能告诉我这是什么问题吗? 谢谢!

我使用的是Win7 64bit + Eclipse Indigo + MinGW

其他答案涵盖了大部分内容,但存在一些问题。 首先, getline()不在C标准库中,而是POSIX 2008扩展。 通常,它将与POSIX兼容的编译器一起使用,因为将使用适当的值定义宏_POSIX_C_SOURCE。 在getline()标准化之前你可能有一个较旧的编译器,在这种情况下这是一个GNU扩展,你必须在#include 之前#define _GNU_SOURCE来启用它,并且必须使用与GNU兼容的编译器,比如gcc。

另外, nbytes类型应为size_t ,而不是int 。 在我的系统上,至少,这些是不同的大小, size_t更长,使用int*而不是size_t*会产生严重的后果(并且也不能使用默认的gcc设置进行编译)。 有关详细信息,请参阅获取热线手册页(http://linux.die.net/man/3/getline)。

通过更改,您的程序将在我的系统上编译并运行正常。

getline不是标准函数,你需要设置一个function测试宏来使用它,根据我的手册页,

 _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700 

对于glibc 2.10或更高版本,

 _GNU_SOURCE 

在那之前。

我也在使用MinGW。 我检查了MinGW头文件并且getline()没有出现在任何C头文件中,它只出现在C ++头文件中。 这意味着MinGW中不存在C函数getline()