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);
}
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.
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.
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.
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
muchas gracias, ya esta solucionado