我知道以下警告是我的错,但我需要一些帮助来解决我做错了什么。我得到:“从不兼容的指针类型传递‘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);
为什么上面给我一个无限循环?
最佳答案
关于第二个参数的问题:您传递给的 getline()
的 &maxSz
类型为 int *
但函数 getline ()
需要 size_t *
类型的第二个参数。
更改声明
int maxSz = 1000;
至
size_t maxSz = 1000;
关于第一个参数:我建议您将char buf[1000];
替换为char * buf;
。当您不知道行的长度时,这是更好的读取行的方法。但不要忘记初始化它(即在调用 getline()
之前添加 buf = 0;
)。如果您阅读 getline() 函数的描述,您会发现第二个参数没有输入。您的 maxSz
不限制字符串的最大长度(在此变量中,您可以找到读取的字符数,包括分隔符,但不包括终止空字节('\0'))。尝试编译分析typical example .
关于c - 从不兼容的指针类型传递 getline() 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25986465/