我正在学习在 C 编程中使用 getline 并尝试了以下代码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;
}
但是,问题是编译器不断返回以下错误:对“getline”的未定义引用。
你能告诉我问题是什么吗?谢谢你!
我使用的是 Win7 64位 + Eclipse Indigo + MinGW
其他答案已经涵盖了大部分内容,但有几个问题。第一的,getline()不在 C 标准库中,而是 POSIX 2008 扩展。通常,它可用于 POSIX 兼容编译器,因为宏 _POSIX_C_SOURCE 将使用适当的值进行定义。您可能有以前的较旧编译器getline()
已标准化,在这种情况下,这是一个 GNU 扩展,您必须#define _GNU_SOURCE
before #include <stdio.h>
要启用它,并且必须使用 GNU 兼容的编译器,例如 gcc。
此外,nbytes
应该有类型size_t
, not int
。至少在我的系统上,它们的大小不同,size_t
更长,并使用int*
代替size_t*
可能会产生严重的后果(并且也不能使用默认的 gcc 设置进行编译)。有关详细信息,请参阅 getline 手册页 (http://linux.die.net/man/3/getline)。
进行此更改后,您的程序可以在我的系统上编译并正常运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)