size_t length en lenguaje C.

Iniciado por NOB2014, 1 Marzo 2016, 22:15 PM

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

NOB2014

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];

#include <stdio.h>
#include <string.h>

int main( void ){
char inicial[2] = {0}, nombre[80] = {0};


printf("\n Ingrese su primer inicial....: ");
fgets(inicial, sizeof(inicial), stdin);
fflush(stdin);

printf("\n Ingrese su nombre............: " );
fgets(nombre, sizeof(nombre), stdin);

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


if(inicial[0] != nombre[0])
printf("\n%s,Usted consiguió su aparejo mal..\n", nombre);
else
printf("\n Bien, %s. Ingreso correcto. Bien hecho!\n", nombre);
return 0;
}


Saludos.
Daniel


abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

MAFUS

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"

NOB2014

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
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

MAFUS

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'.

NOB2014

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. -



Un abrazo, Daniel. -
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

furciorifa

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


NOB2014

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

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

furciorifa

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