Dudas con size_t en lenguaje C.

Iniciado por NOB2014, 22 Enero 2016, 23:29 PM

0 Miembros y 2 Visitantes están viendo este tema.

NOB2014

Hola, a todos.
El caso es que en este tiempo de estudio de C me tope un montón de oportunidades con el tipo size_t, cada vez que esto ocurría consultaba en Internet, pero nunca lo pude comprender del todo, en el programa que dejo a continuación el autor lo utiliza y desearía que me digan (si lo desean) el efecto que tiene en el mismo,-

#include <stdio.h>

const size_t BUFFER_LEN = 512;

int main( void ){
char buffer[BUFFER_LEN];
char *pS[3] = { NULL };
char *pbuffer = buffer;
size_t index = 0;
int i;

printf("\n Introduzca 3 mensajes en total menos de %u caracteres.", BUFFER_LEN-2);


for( i=0 ; i<3 ; i++ ){
printf("\n Ingrese %s Mensaje....:", i>0? "otro" : "primer" );
pS[i] = &buffer[index];
for( ; index<BUFFER_LEN ; index++)
if((*(pbuffer+index) = getchar()) == '\n'){
*(pbuffer+index++) = '\0';
break;
}

if((index == BUFFER_LEN) && ((*(pbuffer+index-1) != '\0') || (i<2))){
printf("\nSe agoto el espacio en el bufer.");
return 1;
}
}

printf("\nLas cadenas introducidas son...:\n\n");
for( i = 0 ; i<3 ; i++ )
printf("%s\n", pS[i]);

printf("\n El bufer tiene %d caracteres sin usar.\n", BUFFER_LEN-index);

return 0;
}


Tengo muchas dudas más con este programa que luego les iré consultando (de ser necesario modificaré el enunciado). -

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

size_t es un álias de unsigned long.

geeke

size_t es un tipo sin signo por lo tanto, no puede representar ningun valor negativo. En su ejemplo , si su índice de bucle va a ser siempre mayor que cero, podría tener sentido usar size_t , o cualquier otro tipo de datos sin signo.

furciorifa

size_t is a type that can hold any array index.

Depending on the implementation, it can be any of:

unsigned char

unsigned short

unsigned int

unsigned long

unsigned long long

Here's how size_t is defined in stddef.h of my machine:

typedef unsigned long size_t;

Lo traigo de stackoverflow

MAFUS

Para aclararlo:
size_t siempre será el tipo de dato entero sin signo que pueda alojar, de forma natural para la máquina, el entero más grande.

Si el procesador es de 8 bits será un unsigned char.
Si el procesador es de 64 bits un unsigned long.

Depende de la arquitectura y el compilador.

NOB2014

Hola a todos.
Muchas pero muchas gracias a los que se ocuparon del tema, pero como a menudo no logro hacerme entender, lo que necesito en concreto es saber que hacen estas 2 lineas, que incidencia tiene sobre el programa. -

size_t index = 0;
const size_t BUFFER_LEN = 512;


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

ivancea96

El primero es el índice que utilizapara recorrer el buffer. Sin más.
El segundo, el const, es para almacenar el tamaño del buffer. Va hacer un buffer de 512 char.

MAFUS

Esto se convierte en:
unsigned long index = 0;
const unsigned long BUFFER_LEN = 512;

El uso es el que te da ivancea69.

NOB2014

Hola, gente.
Por fin tengo claro lo de size_t y lo que hace el programa combinando el tipo char con punteros, estoy tratando de hacer mi propia versión pero no logro cambiar casi nada para lograr lo mismo, no sé Uds.

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 hac el programa es ponerla todo sobre un array grande y usar diferentes punteros para marcar el inicio de cada cadena individual que hay sobre ése.