2013-06-10 6 views
3

Я пытаюсь использовать этот старый пример из «Язык программирования C». Я получаю ошибку конфликтующих типов с помощью функции getline. Я также попытался разместить функцию перед main. Я использую gcc 4.6.3 в качестве моего компилятора.Старый код C не компилируется

#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

Можете ли вы дать нам всю ошибку компилятора с номером строки? – Magn3s1um

+0

Кроме того, yo ucan't передать ваш массив, чтобы получить такую ​​же ссылку. Вам нужно передать адрес массива с помощью & line, а затем аргумент будет иметь тип char *. – Magn3s1um

+0

@ Magn3s1um: Это чепуха. Массив 'char' можно передать в fucntion с помощью' char * '. 'char []', поскольку тип аргумента является синонимом 'char *'. –

ответ

7

Ваша getline функция сталкиваясь с getline, как это предусмотрено в стандартной библиотеке. Лучше всего переименовать вашу функцию.

10

getline - это standard POSIX function в настоящее время, с другой подписью, чем функция в этом примере K & R. Переименуйте getline на что-то еще, и он должен работать.

В качестве альтернативы, скомпилируйте с gcc -std=c89 (или -std=c99), чтобы получить чистый режим ISO C без расширений POSIX или GNU.

Смежные вопросы