旧的C代码没有编译

时间:2013-06-10 15:27:53

标签: 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;
}

2 个答案:

答案 0 :(得分:10)

getline现在是standard POSIX function,其签名与此K&amp; R示例中的函数不同。将getline重命名为其他内容,它应该有效。

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

答案 1 :(得分:7)

您的getline功能与标准库提供的getline冲突。最好重命名您的功能。