我知道以下警告是我的错,但我需要一些帮助来解决我做错了什么。我得到:“从不兼容的指针类型传递'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);
为什么以上给我一个无限循环?
答案 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)