C语言中函数 'getline'的冲突类型

标签 c

我正在尝试运行以下代码,该代码搜索行列表中最长的行并复制/保存它。

int getline(char line[], int maxline);

void copy(char to[], char from[]);

int main()
{
    int len; /* current line length */
    int max; /* maximum length seen so far */
    char line[MAXLINE]; /* current input line */
    char longest[MAXLINE]; /* longest line saved here */

    max = 0;

    while ((len = getline(line, MAXLINE)) > 0)
        if (len > max) {
            max = len;
            copy(longest, line);
        }

    if (max > 0) /* there was a line */
        printf("%s", longest);

    return 0;
}


int getline(char s[],int lim)
{
    int c, i;

    for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
        s[i] = c;

    if (c == '\n') {
        s[i] = c;
        ++i;
    }

    s[i] = '\0';

    return i;
}

void copy(char to[], char from[])
{
    int i;
    i = 0;

    while ((to[i] = from[i]) != '\0')
        ++i;
}

但是编译器说getline有错误存在类型冲突的地方。

主要是getline()通过处理行列表中的字符数来获取行列表中最长的行。

最佳答案

它是冲突的,因为你重新定义了原始libc函数的原型(prototype)getline()其原型(prototype)定义于 <stdio.h> .

来自 man 3 getline我们有:

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

如果你用 int getline(char line[], int maxline) 重新定义它你与原来的getline()相冲突功能。

只需重命名您的函数,使其不会与库冲突。

关于C语言中函数 'getline'的冲突类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45383668/

相关文章:

c - 我们是否应该显式地从 Lua 的 luaL_checkinteger() 等进行转换?

c - char** 和 struct 错误(空)

c - 读取() : Unable to read file for/proc/$pid/status

c - 生命游戏 - 结构单元的二维数组,最好的结构方式是什么?

c - 删除 BST 中的节点而不具有指向其父节点的指针

c++ - 如何识别C或C++

c - 异步c api设计的最佳实践

c - 以最简单的形式使用 fork() 需要按回车键才能完成执行

c - 在 C 中释放内存时出现段错误

c - 如何在 C 程序中计算时间