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

标签 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);

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

最佳答案

关于第二个参数的问题:您传递给的 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/

相关文章:

c - 是否可以在没有单独查找表的情况下为一组小的(<64)键创建最小完美哈希函数?

c++ - 将鼠标点转换为二次 B 样条

c - 模块化 C 开发的最佳实践是什么

c - 我对此感到困惑。数组内容不会保持不变吗?

c++ - 警告由于 ADL 而丢失 std::prefixes

c - 内联汇编中的 "matching constraint"是什么意思?

c++ - 基类和派生类之间的不同调试器指针地址

c - 如何将指向 char 的指针放入另一个指向 char 的指针

objective-c - 发现多个名为 "count"的方法具有不匹配的结果、参数类型或属性

java - 编译java的小麻烦