Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 2 Diciembre 2016, 16:34 pm



Título: Declarar arreglo luego de conocer la cantidad de elementos necesarios [C].
Publicado por: NOB2014 en 2 Diciembre 2016, 16:34 pm
Hola, ¿cómo están?
Estoy haciendo algunos repasos y me encontré con este dilema y quería consultarlos, lo que desearía hacer es declarar numeroCadena luego de conocer cuantos dígitos tiene numeroEntero, por lo que tengo leído esto no es permitido en C, pero como aquí hay genios en programación, me atrevo a consultarlos. -

Código
  1. #include <stdio.h>
  2. int cantidadDigitos;
  3.  
  4. int main( void ){
  5. int  numeroEntero = 41520;
  6. char numeroCadena[6];
  7.  
  8. cantidadDigitos = sprintf(numeroCadena, "%d", numeroEntero);
  9.  
  10. printf("\n %s tiene %d digitos \n", numeroCadena, cantidadDigitos );
  11. return 0;
  12. }
  13.  
Saludos y desde ya muchas gracias. -



Título: Re: Declarar arreglo luego de conocer la cantidad de elementos necesarios [C].
Publicado por: engel lex en 2 Diciembre 2016, 16:51 pm
lo que necesitas es redimensionar el arreglo... para ellos usas malloc o realloc

ejemplo tipico

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.   char *str;
  7.  
  8.   // crear un array dinamicamente
  9.   str = (char *) malloc(sizeof(char) * 16);
  10.   strcpy(str, "memoria alojada");
  11.   printf("String = %s,  Address = %u\n", str, str);
  12.  
  13.   // redimensionar array
  14.   str = (char *) realloc(str, sizeof(char) * 34);
  15.   strcat(str, " y redimensionada");
  16.   printf("String = %s,  Address = %u\n", str, str);
  17.  
  18.   //liberar memoria
  19.   free(str);
  20.  
  21.  
  22.   //alojar nueva memoria
  23.   str = (char *) malloc(sizeof(char) * 28);
  24.   strcpy(str, "memoria alojada nuevamente");
  25.   printf("String = %s,  Address = %u\n", str, str);
  26.  
  27.   //liberar memoria
  28.   free(str);
  29.  
  30.   return(0);
  31. }


Título: Re: Declarar arreglo luego de conocer la cantidad de elementos necesarios [C].
Publicado por: NOB2014 en 3 Diciembre 2016, 11:50 am
Hola, engel lex. -
Con el apuro (hora de almorzar) se me olvido, había pensado en escribir que ya tenía conocimiento para hacerlo con memoria dinámica, de cualquier manera si no pusiste otra posibilidad es evidente que no existe, no obstante, recuerdo que una vez no sé si en un hilo mío o lo leí por allí habian hecho algo parecido sin memoria dinámica, con un struct pero no lo puedo encontrarlo por ningún lado. -

A continuar repasando, un saludo y gracias. -