Originariamente inviato da playbasfa
A quanto ho capito io il return i della funzione getline restituisce un valore che viene attribuito a line; queso valore successivamente tramite la funzione copy verrà attributo a longest,
Non capisco tutto quello che segue a questa affermazione, comunque getline restituisce il numero di caratteri acquisiti, infatti il tipo restituito è un intero. Ti commento il codice:
codice:
#include <stdio.h>
#define MAXLINE 1000
/*
getline: Acquisisce una stringa da tastiera
Parametri:
s: puntatore al buffer in cui memorizzare i caratteri
uu: numero massimo di caratteri da acquisire
Valore restituito: numero di caratteri acquisiti
*/
int getline(char s[], int uu)
{
     int c,i;
     for (i=0; i<uu-1 && (c=getchar()) != EOF && c!= '\n'; ++i)
         s[i] = c;
         if (c == '\n')
         {
         s[i] = c;
         ++i;
         }
     s[i]='\0';
     return i;
}
/*
copy: copia il contenuto di una stringa in un'altra stringa
Parametri:
to: stringa di destinazione
from: stringa di origine
Valore restituito: nessuno
*/
void copy (char to[], char from [])
{
     int i;
     i=0;
     while ((to[i] = from[i]) != '\0')
           ++i;
}
/*
main: entrypoint dell'applicazione
Acquisisce una serie di stringhe da tastiera fino a quando l'utente non inserisce una
stringa vuota e mostra la stringa più lunga inserita
*/
main ()
{
     int len; /* lunghezza della stringa appena acquisita da tastiera */
     int max; /* lunghezza della stringa più lunga finora inserita (quindi lunghezza di longest)
     char line [MAXLINE]; /* stringa appena acquisita da tastiera */
     char longest [MAXLINE]; /* stringa più lunga finora inserita */
     max=0; /* inizializza max */
     /* Ciclo ripetuto finché l'utente non preme Invio senza inserire caratteri (nel qual caso la funzione getline restituisce 0 e il ciclo termina)
     In questa istruzione avvengono diverse cose:
     1. viene acquisita una stringa da tastiera, memorizzandola nell'array di caratteri line;
     2. il valore restituito da getline (ossia la lunghezza della stringa acquisita) viene memorizzato in len, che quindi ora conterrà la lunghezza di line;
     3. il valore di len viene confrontato con 0: se è maggiore di 0 il ciclo che segue viene eseguito.
     */
     while ((len = getline(line, MAXLINE)) >0)
     {
           /* se la lunghezza della stringa acquisita è maggiore di quella della stringa fino ad ora più lunga... */
           if (len > max)
                  {
                  /* ... memorizza in max il valore di len, ossia la nuova lunghezza di longest, dal momento che ... */
                  max=len;
                  /* ... in longest ora viene copiata la stringa appena acquisita. */
                  copy(longest, line);
                  }
     }
     /* al termine del ciclo se sono state inserite parole visualizza la più lunga */
     if (max >0)
          printf ("%s", longest);
     return 0;
}
.