我正在学习在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;
}
Run Code Online (Sandbox Code Playgroud)
但是,问题是编译器不断返回错误:未定义的引用'getline'.你能告诉我问题是什么吗?谢谢!
我使用的是Win7 64bit + Eclipse Indigo + MinGW
我目前正在进行的实验使用的软件库具有复杂的源历史记录,并且没有明确定义的许可证.合理化事物并在固定许可下发布将是一项相当大的工作.
它也打算运行一个随机的unixish平台,只有我们支持的一些libc有GNU getline,但现在代码期望它.
有没有人知道在限制较少的许可下可以重新实现GNUgetline语义?
编辑::我问,因为谷歌没有帮助,我想尽可能避免写一个(这可能是一个有趣的练习,但它不能最好地利用我的时间.)
更具体地说,有问题的界面是:
ssize_t getline (char **lineptr, size_t *n, FILE *stream);
Run Code Online (Sandbox Code Playgroud) 来自GNU C编程教程:
该
fgets("文件中获取字符串")功能类似于获取功能.这个函数已被弃用 - 这意味着它已经过时,强烈建议你不要使用它 - 因为它很危险.这很危险,因为如果输入数据包含空字符,则无法分辨.fgets除非您知道数据不能包含null,否则请勿使用.不要使用它来读取用户编辑的文件,因为如果用户插入空字符,您应该正确处理它或打印清晰的错误消息.如果可以,请始终使用getline或getdelim代替fgets.
我觉得这个fgets功能在遇到a \0或者时会停止\n; 为什么当fgets应该正确处理输入时,这个手册页建议空字节是"危险的" ?此外,之间有什么区别getline和fgets,是fgets真正视为功能过时的C99或将来的C标准?
我试图使用C语言从stdin读取未知长度行.
我在网上看到了这个:
char** str;
gets(&str);
Run Code Online (Sandbox Code Playgroud)
但它似乎给我带来了一些问题,我真的不明白如何以这种方式做到这一点.
你能解释一下为什么这个例子工作/不工作以及实现它的正确方法(用malloc吗?)
我有一个包含文本的列列表,但我只是从这个列表中获取第一行。怎么做?
#include <stdio.h>
int main()
{
FILE *fr;
char c;
fr = fopen("prog.txt", "r");
while( c != EOF)
{
c = fgetc(fr); /* read from file*/
printf("%c",c); /* display on screen*/
}
fclose(fr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)