我试图从命令行的stdin一次读取任意长度的一行。我不确定我是否能够包含GNU readline并且更愿意使用库函数。
我读过的文档表明getline
应该有效,但在我的实验中它并没有阻止。我的示例程序:
#include <stdio.h>
int main()
{
char *line = NULL;
if (getline(&line, NULL, stdin) == -1) {
printf("No line\n");
} else {
printf("%s\n", line);
}
return 0;
}
生成No line
,这使得它不适合接受用户输入。
我该怎么做?我知道这应该是微不足道的,但我还没能弄清楚。
答案 0 :(得分:54)
试试这个补丁
char *line = NULL;
+size_t size;
+if (getline(&line, &size, stdin) == -1) {
-if (getline(&line, 0, stdin) == -1) {
printf("No line\n");
} else {
答案 1 :(得分:5)
我能够在getline
上重现“非阻止”行为:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *buffer;
size_t n = 1024;
buffer = malloc(n);
return getline(&buffer, &n, stdin);
}
getline(&buffer...
块。如果我将NULL
分配给buffer
,则再次阻止(如广告所示),并将该行存储在新分配的缓冲区中。
但如果我写
getline(NULL, &n, stdin);
然后getline
失败,似乎不会阻止。可能还有一个无效的n
或文件指针可能会导致相同的行为。这可能是问题吗?