elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Declarar arreglo luego de conocer la cantidad de elementos necesarios [C].
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Declarar arreglo luego de conocer la cantidad de elementos necesarios [C].  (Leído 2,627 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Declarar arreglo luego de conocer la cantidad de elementos necesarios [C].
« 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. -



En línea

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.-
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Declarar arreglo luego de conocer la cantidad de elementos necesarios [C].
« Respuesta #1 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. }


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Declarar arreglo luego de conocer la cantidad de elementos necesarios [C].
« Respuesta #2 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. -
En línea

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.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines