旧的C代码没有编译

Nel*_*lly 3 c gcc

我正在尝试"C编程语言"中的这个旧例子.我正在使用该getline函数获得冲突类型错误.我也试过在main之前放置这个函数.我使用gcc 4.6.3作为我的编译器.

#include <stdio.h>
#define MAXLINE 1000

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

int main(void)
{
    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;
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 10

getline是现在的标准POSIX功能,具有与此K&R示例中的功能不同的签名.重命名getline为其他东西,它应该工作.

或者,使用gcc -std=c89(或-std=c99)编译以获得没有POSIX或GNU扩展的纯ISO C模式.


sim*_*onc 7

您的getline函数与标准库提供的getline冲突.最好重命名你的功能.