Witam. Kontynuując moje poznawanie języka C z książki ANSI C doszedłem do rozdziału o funkcjach. Był tam program szukający najdłuższego wiersza, wpisujący go do tablicy a potem wyświetlający go. Problemem było to, że w oryginalnej wersji programu była stała MAX która określała wielkość tablicy. W ramach ćwiczenia miałem poprawić główną część programu tak by nie było problemu z ograniczoną pojemnością tablic w sensie "Popraw główną funkcję programu szukającego najdłuższego wiersza, tak, aby program zawsze poprawnie wypisywał rozmiar dowolnie długich wierszy i tylko tyle tekstu, ile jest możliwe." Napisałem więc ten program w taki sposób:

#include <stdio.h>
#include <stdlib.h>

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

int main()
{
    int l,max,n;
    n=0;
    max=maxline();
    char line[max],longest[max];
    while((l=getline(line,max))>0){
        if(l>n){
            n=l;
            copy(longest,line);
        }
    }
    if(n>0)
        printf("%s",longest);
    else
        printf("brak wierszy\n");
    return 0;
}
int getline(char l[],int m){
   int c,i;
    for(i=0;i<m-1&&(c=getchar())!=EOF&&c!='\n';++i)
        l[i]=c;
    if(c=='\n'){
        l[i]=c;
        ++i;
    }
    l[i]='\0';
    return i;
}
void copy(char to[],char from[]){
    int i;
    i=0;
    while((to[i]=from[i])!='\0')
        ++i;
}
int maxline(){
    int c,i,n;
    n=0;
    for(i=0;(c=getchar())!=EOF;++i){
        if(c=='\n'){
            if(i>n)
                n=i;
            i=0;
        }
    }
    return n+1;
}

Dodałem funkcje maxline sprawdzającą jaka jest długość najdłuższego wiersza i zwracająca tą wartość większą o jeden by w tablicy zmieścił się dodatkowo znak '\0'. Na podstawie tej wielkości generuje odpowiednio duże tablice i reszta powinna działać jak należy gdyż wprowadzone zmiany były małe (działa wszystko na tej samej zasadzie tylko jest uzależnione od zmiennej max zamiast stałej MAX). Problem w tym, że program nie działa teraz prawidłowo a ja nie rozumiem czemu. Z przeprowadzonych testów wynika, że prawdopodobnie problem siedzi w funkcji getline która z jakiegoś powodu ciągle zwraca 0.

Mały update
Zastanawiałem się czy może problem nie polega na konflikcie funkcji getline zadeklarowanej przeze mnie z znajdującą się już w bibliotekach ale zmiana nazwy funkcji nic nie zmieniła.