这是一个我试图直接从"C编程语言"第1.9节运行的程序.

#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);

main()
{
    int len;
    int max;
    char line[MAXLINE];
    char longest[MAXLINE];

    max = 0;
    while ((len = getline(line, MAXLINE)) > 0)
        if (len > max) {
        max = len;
        copy(longest, line);
        }
    if (max > 0)
        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;
}

以下是我try 使用Ubuntu 11.10编译程序时遇到的错误:

cc     word.c   -o word
word.c:4:5: error: conflicting types for ‘getline’
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was here
word.c:26:5: error: conflicting types for ‘getline’
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was here
make: *** [word] Error 1

为了确保书中的内容没有问题,我参考了书中章节后面练习的这组答案(http://users.powernet.co.uk/eton/kandr2/krx1.html)当我try 从这个链接运行练习18、19、20、21等时,我会遇到类似的错误.当我无法运行程序来查看它们的输出时,学习起来真的很难.这个问题始于在一个程序中引入字符数组和函数调用.如果您能就这个问题提供任何建议,我将不胜感激.

推荐答案

问题是getline()是一个标准的库函数.(在stdio.h中定义)您的函数具有相同的名称,因此与之冲突.

解决方法是简单地更改名称.

Linux相关问答推荐

如何限制SLURM中并行执行的程序数量

为什么硬编码的阿拉伯字母与Unicode代码点不具有相同的值

无法分析nasm中的单词

Bash shell 脚本未通过 TRUE 条件

cu可以从串口读取,但我自己的C程序不能

为什么 liburing 写入性能低于预期?

如何使用netcat为DPDK实例提供输入?

使用ansible配置Linux VM使用vmware_vm_shell模块时变成su?

如何在 DolphinDB 中递归查找目录中的所有文件?

在 bash 中获取目录或文件的基本名称的快速且正确的方法

我可以防止 gcc 优化器延迟内存分配吗?

如何使用 __attribute__((visibility("default")))?

永久反转补丁文件

未定义的引用 'shm_open',已在此处添加 -lrt 标志

scp 使用私钥身份验证将目录复制到另一台服务器

如何使用 C++ 在 Linux 中获取总 CPU 使用率

在 Unix 上计算每行/字段的字符出现次数

区分 Java 线程和 OS 线程?

构建窗口管理器

如何始终以 GB 为单位获取 df linux 命令输出