Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: [Kayser] en 17 Diciembre 2012, 19:26 pm



Título: Duda con codigo
Publicado por: [Kayser] en 17 Diciembre 2012, 19:26 pm
Buenas gente estoy estudiando C con el libro El lenguaje de programacion C de Kernighan y Ritchie y en una parte del libro en la que sale el codigo siguiente que se supone que toma una serie de caracteres introducidos por el teclado y devuelve el mas largo me han salido varias dudas:
(http://s18.postimage.org/ydhm2gos7/2012_12_12_195953.png)
Código:
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[],int maxline);
void copy(char to[],char from[]);
main()
{
    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;
}

No veo claro cuando se reinicializa la variable i en el array. En que momento la i se reinicializa para que s sea s[0] y sobreescriba la anterior secuencia de caracteres que habia? Porque para que en cada momento se vaya escribiendo la secuencia de caracteres que se introduzca en el array i tiene que haber un momento en que se salga del bucle for y se reinicie la i a 0 no? Si no se continuaria incrementando la i partiendo de la ultima posicion rellenada con un caracter y el programa no funcionaria como es espera devolviendo la secuencia caracteres mas larga... Porque cuando sale del ciclo for cuando se cumpla una de las condiciones o cuando se cumplan todas?


Título: Re: Duda con codigo
Publicado por: naderST en 17 Diciembre 2012, 20:27 pm
La i en el caso de la función getline() se inicializa en el for:

for(i=0;i<lim-1 &&(c=getchar())!=EOF && c!='\n';++i)

En el caso de la función copy se inicializa antes del while

int i;
i=0;
while((to=from)!='\0')
++i;