【问题标题】:Error trying to use getLine() in C to read stdin尝试在 C 中使用 getLine() 读取标准输入时出错
【发布时间】:2017-10-12 08:49:43
【问题描述】:

我正在使用 C 的这个函数通过 getLine() 函数读取用户输入 (stdin)。此函数返回一个带有用户输入的 char*。这是片段:

char * rline(void)
{

char *line;
size_t buff = 0; 
char * getLine(&line, &buff, stdin);
return line;

}

但是,当它运行时,会显示此错误并且无法编译。

error: expected declaration specifiers or '...' before '&' token    

我环顾四周,但不太明白为什么会发生这种情况,我的语法是正确的还是逻辑错误?

【问题讨论】:

  • 只需阅读如何在 C 中使用函数:programiz.com/c-programming/c-functions
  • @Abend 谢谢,但我对调用函数很熟悉,你认为我打算如何调用这个函数?
  • @DavidBowling 我没有使用 POSIX,但谢谢。我尝试了 getline() 和 getLine() 但都返回相同的错误:未定义的引用。
  • 啊,我明白了——我在标题的顶部包含了#define _GNU_SOURCE,还尝试了#define _POSIX_C_SOURCE 200809L——两者仍然给我同样的错误(未定义的参考)
  • 我想不通-我改变了我的方法以完全避免 getline。感谢您的帮助。

标签: c compiler-errors stdin getline


【解决方案1】:

您错误地调用了该函数。 char * 在你的函数调用之前没有任何作用,它只需要在函数的声明中。

正确的函数声明示例:

char * getLine(char *, int, int);

正确的函数调用示例:

getLine(&line, &buff, stdin);

顺便说一句,我认为缓冲区的大小是由你来选择的,通过为第二个参数设置一个值。

【讨论】:

  • 谢谢,但是当我在我的头文件中声明函数(如果我没有),然后尝试调用它时,它给了我错误 "undefined reference to getLine()" ,为什么是这样吗?
  • @JohnStawket 没有称为getLine的标准函数
  • @ErikW 没有吗? This is the man page for getline(3), included in <stdio.h>。我已经尝试过 getline() 和 getLine() 但都给出了相同的错误:未定义的引用。
  • @JohnStawket 它是一个 POSIX 函数。您应该更喜欢使用标准函数。如果你真的想用getline,写这个:#define _GNU_SOURCE上面#include &lt;stdio.h&gt;
  • 我已经在我的标题顶部写了,但我仍然得到未定义的引用错误。
猜你喜欢
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多