elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda sobre codigo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre codigo  (Leído 2,406 veces)
javituni

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Duda sobre codigo
« en: 12 Abril 2013, 22:10 pm »

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);
}


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Duda sobre codigo
« Respuesta #1 en: 12 Abril 2013, 22:48 pm »

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.


En línea

Regístrate en
javituni

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Duda sobre codigo
« Respuesta #2 en: 12 Abril 2013, 23:24 pm »

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.
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Duda sobre codigo
« Respuesta #3 en: 12 Abril 2013, 23:39 pm »

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.
En línea

Regístrate en
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda sobre codigo
« Respuesta #4 en: 13 Abril 2013, 03:41 am »

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:
Código
  1. char linea[1024];
  2.  
  3. /* ... */
  4.  
  5. if (fgets(linea, 1024, fich)){
  6.   argumento[0] = '\0';
  7.   sscanf(linea, "%s %[^\n]", mandato, argumento);
  8. }

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

Un saludo
En línea

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

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Duda sobre codigo
« Respuesta #5 en: 13 Abril 2013, 18:01 pm »

muchas gracias, ya esta solucionado
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda sobre generar código en textbox
Programación Visual Basic
julietth 2 2,250 Último mensaje 4 Abril 2009, 18:26 pm
por julietth
Duda sobre codigo Eficiencia « 1 2 »
Java
lexoazul 11 5,672 Último mensaje 1 Septiembre 2010, 05:30 am
por lexoazul
Duda sobre código
Programación C/C++
Xenomorfo77 7 2,784 Último mensaje 6 Mayo 2012, 21:49 pm
por Xenomorfo77
Duda sobre cierto código en C
Programación C/C++
valthomous 1 1,493 Último mensaje 25 Mayo 2014, 15:24 pm
por rir3760
Duda sobre código
Java
Genvi 1 1,569 Último mensaje 12 Diciembre 2015, 23:10 pm
por DarK_FirefoX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines