Duda sobre codigo

Iniciado por javituni, 12 Abril 2013, 22:10 PM

0 Miembros y 1 Visitante están viendo este tema.

javituni

Alguien podria decirme que hace el if, la funcion bzero y la funcion sscanf de este condigo? No consigo entenderlo. Gracias

char linea[1024];

if(fgets(linea,1024,fich)){

bzero(argumento,sizeof(argumento));
sscanf(linea,"%s %[^\n]",mandato,argumento);
}

avesudra

Busca un poco:
bzero:
http://lmgtfy.com/?q=bzero+c+function
sscanf:
http://lmgtfy.com/?q=sscanf+c+function
fgets:
http://lmgtfy.com/?q=fgets+c+function

Lo más difícil ahí es el if quizás, dependiendo del retorno de la función fgets decide una cosa u otra, si la función cumple con su cometido y no falla devuelve la cadena, si encuentra el fin de archivo pues devuelve EOF y si hay un error se devuelve un puntero nulo. Es decir que entra al if cuando la función cumpla con su cometido.
Regístrate en

javituni

antes de preguntar aqui he buscado, pero me sigue sin quedar claro que hace, sobre todo el bzero, y el if ya ha quedado claro, tenia la duda de cuando entraba dentro.

avesudra

El bzero lo que hace es poner tantos 0 como le indiques en el área apuntada por el puntero que tu le pasas. El sscanf lo que hace es "leer" del array línea una cadena de carácteres y guardarla en mandato y el [^\n] extrae cualquier carácter que no sea el final de línea y lo guarda en argumento.
Regístrate en

rir3760

avesudra ya dio una explicación sobre el condicional.

Solo un comentario: siendo estrictos no es necesario utilizar la función bzero como programación defensiva (para proteger contra el escenario donde sscanf falle).

En lugar de esa funcion se puede almacenar un '\0' en la primera posicion del array. En el contexto de cadenas el efecto es el mismo:
char linea[1024];

/* ... */

if (fgets(linea, 1024, fich)){
   argumento[0] = '\0';
   sscanf(linea, "%s %[^\n]", mandato, argumento);
}


Una mejor opción es verificar el valor de retorno de sscanf

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

javituni

muchas gracias, ya esta solucionado