从不兼容的指针类型传递getline()的参数

时间:2014-09-23 03:39:18

标签: c pointers compiler-warnings getline

我知道以下警告是我的错,但我需要一些帮助来解决我做错了什么。我得到:“从不兼容的指针类型传递'getline'的参数1”,对于参数2也是如此。

这是我对getline()的调用:

getline(&line.buf, &maxSz, stdin)

以下是相关的参数声明:

line_t line;
int maxSz = 1000;

typedef struct line_t {
  char buf[1000];
  int lineLength;   
  int wordCount;
  int index;
} line_t;

我认为问题在于我正在考虑指向什么的地址,但在测试了几个不同的getline调用之后,我还没有找到解决方案。我绝对认为参数2是maxSz不是指针的事实。

while (-1 != (line.lineLength = getline((char**) &line.buf, &maxSz, stdin))) {
        printf("buf is %s\n",line.buf);

为什么以上给我一个无限循环?

3 个答案:

答案 0 :(得分:0)

关于第二个参数的问题:您传递给&maxSz的{​​{1}}类型为getline(),但函数int *需要类型getline()的第二个参数。 更改声明

size_t *

int maxSz = 1000;

关于第一次评估:我建议您将size_t maxSz = 1000; 替换为char buf[1000];。当你不知道它的长度时,这是更好的阅读方式。但是不要忘记初始化它(即在调用char * buf;之前添加buf = 0;)。如果您阅读了getline()函数的说明,则不会输入第二个参数。您的getline()并不限制字符串的最大长度(在此变量中,您可以找到读取的字符数,包括分隔符,但不包括终止空字节(' \ 0&#39 ;))。尝试编译和分析typical example

答案 1 :(得分:0)

您最好使用fgets代替getline,例如

while ( fgets(line.buf, maxSz, stdin) != NULL ) 
{ 
    // do something with the line
}

答案 2 :(得分:-1)

试试这个:

getline(&line.buf, &sizeof(maxSz), stdin)