Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 22 Enero 2016, 23:29 pm



Título: Dudas con size_t en lenguaje C.
Publicado por: NOB2014 en 22 Enero 2016, 23:29 pm
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,-

Código
  1. #include <stdio.h>
  2.  
  3. const size_t BUFFER_LEN = 512;
  4.  
  5. int main( void ){
  6. char buffer[BUFFER_LEN];
  7. char *pS[3] = { NULL };
  8. char *pbuffer = buffer;
  9. size_t index = 0;
  10. int i;
  11.  
  12. printf("\n Introduzca 3 mensajes en total menos de %u caracteres.", BUFFER_LEN-2);
  13.  
  14.  
  15. for( i=0 ; i<3 ; i++ ){
  16. printf("\n Ingrese %s Mensaje....:", i>0? "otro" : "primer" );
  17. pS[i] = &buffer[index];
  18. for( ; index<BUFFER_LEN ; index++)
  19. if((*(pbuffer+index) = getchar()) == '\n'){
  20. *(pbuffer+index++) = '\0';
  21. break;
  22. }
  23.  
  24. if((index == BUFFER_LEN) && ((*(pbuffer+index-1) != '\0') || (i<2))){
  25. printf("\nSe agoto el espacio en el bufer.");
  26. return 1;
  27. }
  28. }
  29.  
  30. printf("\nLas cadenas introducidas son...:\n\n");
  31. for( i = 0 ; i<3 ; i++ )
  32. printf("%s\n", pS[i]);
  33.  
  34. printf("\n El bufer tiene %d caracteres sin usar.\n", BUFFER_LEN-index);
  35.  
  36. return 0;
  37. }

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

Saludos.


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: MAFUS en 22 Enero 2016, 23:46 pm
size_t es un álias de unsigned long.


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: geeke en 23 Enero 2016, 01:22 am
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.


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: furciorifa en 23 Enero 2016, 06:10 am
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


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: MAFUS en 23 Enero 2016, 09:39 am
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.


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: NOB2014 en 23 Enero 2016, 14:15 pm
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.-


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: ivancea96 en 23 Enero 2016, 14:35 pm
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.


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: MAFUS en 23 Enero 2016, 15:30 pm
Esto se convierte en:
unsigned long index = 0;
const unsigned long BUFFER_LEN = 512;

El uso es el que te da ivancea69.


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: NOB2014 en 24 Enero 2016, 14:55 pm
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


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: MAFUS en 24 Enero 2016, 15:08 pm
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.


Título: Re: Dudas con size_t en lenguaje C.
Publicado por: NOB2014 en 24 Enero 2016, 15:30 pm
Hola, MAFUS.
Buena síntesis, solo sugería que alguien postee una versión distina porque seguramente experto como Uds. pueden lograr lo mismo de otra manera y los que estamos aprendiendo nos vemos muy beneficiados al tener más de una versión para lograr lo mismo. - 

Saludos.