Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 1 Marzo 2016, 22:15 pm



Título: size_t length en lenguaje C.
Publicado por: NOB2014 en 1 Marzo 2016, 22:15 pm
Hola, gente.
Lamento molestarlos por tan poco, en realidad tendría que tener un "amigo" para hacerle estas consultas tan poco relevantes, pero lamentablemente y a pesar de tener mucho tiempo en los foros no lo consigo todavía, bueno basta de prólogo y al grano, alguien me podría decir que hacen las 2 lineas que resalto a continuación. -

size_t length = strlen(nombre);
nombre[length-1] = nombre[length];

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main( void ){
  5. char inicial[2] = {0}, nombre[80] = {0};
  6.  
  7.  
  8. printf("\n Ingrese su primer inicial....: ");
  9. fgets(inicial, sizeof(inicial), stdin);
  10. fflush(stdin);
  11.  
  12. printf("\n Ingrese su nombre............: " );
  13. fgets(nombre, sizeof(nombre), stdin);
  14.  
  15. size_t length = strlen(nombre);
  16. nombre[length-1] = nombre[length];
  17.  
  18.  
  19. if(inicial[0] != nombre[0])
  20. printf("\n%s,Usted consiguió su aparejo mal..\n", nombre);
  21. else
  22. printf("\n Bien, %s. Ingreso correcto. Bien hecho!\n", nombre);
  23. return 0;
  24. }

Saludos.
Daniel

(http://i68.tinypic.com/2wcn21x.png)


Título: Re: size_t length en lenguaje C.
Publicado por: MAFUS en 1 Marzo 2016, 22:34 pm
Lo que hace es retrasar una posición el carácter de fin de cadena '\0' sustituyendo al carácter de nueva línea.
fgets guarda las cadenas de esta forma, si la ha conseguido desde stdin y la ha leído toda:
"Una cadena de ejemplo\n\0"


Título: Re: size_t length en lenguaje C.
Publicado por: NOB2014 en 1 Marzo 2016, 22:59 pm
Hola,
A ver si entendí, la primera línea lo que hace es guardar en length el largo de la cadena (tampoco estoy seguro) y la segunda no la entiendo porque no comprendo como copia el  \0.-

Daniel


Título: Re: size_t length en lenguaje C.
Publicado por: MAFUS en 2 Marzo 2016, 11:11 am
Sí, la primera da la longitud de la cadena hasta el caracter '\0', no incluido. Si lo cuentas a mano verás que el caracter nombre[length] es el '\0' y el caracter nombre[length-1] es '\n'. La siguiente línea de código sustituye el caracter '\n' por el '\0'.


Título: Re: size_t length en lenguaje C.
Publicado por: NOB2014 en 2 Marzo 2016, 13:56 pm
Hola, MAFUS . -
Una reflección, por momentos que paciencia tienen Uds. mira que era sencillo pero no me caía la ficha, dejo una imagen por si algún "lento" como Danielito lee este hilo. -

(http://i63.tinypic.com/qya347.png)

Un abrazo, Daniel. -


Título: Re: size_t length en lenguaje C.
Publicado por: furciorifa en 6 Marzo 2016, 15:14 pm
Pues ya te respondieron,  cabe destacar que el que programó esto no se destaca por su experiencia, debido a que usa un arreglo para utilizar un caracter es redundante,  el uso de fflush con fgets es irrelevante ya que como se aprecia fgets toma el salto de línea, otra cosa tu cuestión de las 2 líneas que no entendiste eran innecesarias en el código ya que sólo iba a comparar los primeros índices



Título: Re: size_t length en lenguaje C.
Publicado por: NOB2014 en 6 Marzo 2016, 21:48 pm
Hola, amigo, muchas gracias por tu participación y aclaraciones, en cuanto al manual que estoy consultando en este momento es: BeginningC From Novice to Professional, 4th Edition y me parece que tiene cosas interesantes, eso no quita que me parezca bueno a mí que estoy estudiando y sea mediocre para alguien como voz que si no leí mal das clases de programación. -

Saludos.
Daniel



Título: Re: size_t length en lenguaje C.
Publicado por: furciorifa en 7 Marzo 2016, 06:53 am
Es muy bueno el libro, el problema es que a veces se basan en programar C para Windows y no un ANSI C limpio, C es muy portable, sabiendo hacer bien las cosas, te recomiendo más Deitel, para punteros y cosas más avanzadas, Understanding and Using Pointers in C