2014-12-27 3 views
-1

Я считаю, что скопировал этот код дословно из книги. Он работает, но генерирует три предупреждения:Предупреждения компилятора от программы K & R

C4047: «функция»: «полукокса» отличается уровней косвенности от 'гольца [1000]

C4024: «копия»: различные типы для формального и фактического параметра 2

C4028: формальный параметр 2 отличается от декларации

Вот код. Что я делаю не так? Большое спасибо.

#include <stdio.h> 
#define MAXLINE 1000 //max input line size 

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

//print longest input line 
main() 
{ 
    int len; //current line length 
    int max; //max length seen so far 
    char line[MAXLINE]; //current input line 
    char longest[MAXLINE]; //longest line saved here 

    max = 0; 
    while ((len = getline(line, MAXLINE)) > 0) 
     if (len > max) { 
      max = len; 
      copy(longest, line); 
     } 
    if (max > 0) //there was a line 
     printf("%s", longest); 
    return 0; 
} 
//getline: read a line into s, return length 
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; 
} 
//copy: copy 'from into 'to'; assume to is big enough 
void copy(char to[], char from[]) 
{ 
    int i; 

    i = 0; 
    while ((to[i] = from[i]) != '\0') 
     ++i; 
} 
+3

Вопросы типографии считаются не по теме. –

ответ

1

Проблема заключается в том, что в прямом заявлении на пятой строке у вас есть это:

void copy(char to[], char from); // <<== No square brackets 

и в определении у вас есть это:

void copy(char to[], char from[]) ... 

определение является правильным; передовой декларации нет. Вам нужно добавить квадратные скобки для форвардной декларации, чтобы исправить эту проблему.

+0

Большое спасибо dasblinkenlight! – kits

+0

Сделано! Спасибо за совет! – kits

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