0
votes

I'm new to C and I'm using The C Programming Language, I copied down 1.9 which tries to print the longest line. While I try to build the program in Xcode, it shows there are errors of conflicting types and a problem with expression, I've tried to put the function "getline" before the main but I still don't know what is going wrong.

#include <stdio.h>
#define MAXLINE 1000 /* maximum input line size */
int getline(char line[ ], int marline);     ----ISSUE:Conflicting types for "getline"
void copy(char to[ ], char from[ ]);

/* print longest input line*/
int main(){
int len; /* current line length */
int max; /* maximum 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)     ------ISSUE:Expected Expression
    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){            ----ISSUE:Conflicting types for "getline"    
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;}
2
Please format your code properly. - Jabberwocky
getline is reserved function. Rename that function, eg: my_getline - LPs
while ((len=getline(line[ ], MAXLINE))>0) -> while ((len=getline(line, MAXLINE))>0). For the rest, see answer below. - Jabberwocky
int main(){ tends to be frowned upon. Use int main ( void ) or int main(int argc, char **argv) instead - Elias Van Ootegem

2 Answers

1
votes

It's conflicting with the standard librarys's getline() function, which didn't exist when that book was written (it's from POSIX.1-2008, the book is ... older).

Rename the function in the example, to avoid the collision. Just use mygetline() instead and you should be fine.

1
votes

In ISO C your program is OK, however you are using a compiler that defaults to POSIX C, or something.

If you are using a compiler that supports ISO conformant mode, invoke that mode via compiler switches. For gcc it is -std=c11 or -std=c99.