3

我正在尝试“The C Programming Language”中的这个旧示例。我在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;
}
4

2 回答 2

10

getline是当今的标准 POSIX 函数,与此 K&R 示例中的函数具有不同的签名。重命名getline为其他名称,它应该可以工作。

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

于 2013-06-10T15:30:36.097 回答
7

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

于 2013-06-10T15:30:25.860 回答