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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda - Ajustar tamaño array - variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda - Ajustar tamaño array - variable  (Leído 3,282 veces)
Miky Gonzalez

Desconectado Desconectado

Mensajes: 87

http://mikygonzalez.comule.com/blog/


Ver Perfil WWW
Ayuda - Ajustar tamaño array - variable
« en: 4 Julio 2012, 11:46 am »

Buenas, tengo el siguiente codigo:
Código
  1. char caracteres[39] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}, prueba[] = "HOLA MUNDO";
Como puedo hacer por ejemplo que al hacer:
Código
  1. strcpy(caracteres, prueba);
Se ajuste el tamaño de caracteres a 11 (caracteres[11]) para ahorrar la memoria de esas posiciones que ya no usare. Al hacer el strcpy me queda:
Código
  1. char caracteres[39] = {'H', 'O', 'L', 'A', ' ', 'M', 'U', 'N', 'D', 'O', '\n', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}
Como puedo eliminar lo anterior y ajustar el valor de caracteres[39] a caracteres[11] (se incluye el final de cadena).


« Última modificación: 4 Julio 2012, 11:48 am por Miky Gonzalez » En línea

Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:


EN CONSTRUCCIÓN
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Ayuda - Ajustar tamaño array - variable
« Respuesta #1 en: 4 Julio 2012, 12:15 pm »

A no ser que uses memoria dinámica, no va a poder ser...

Tendrías que declarar la variable "caracteres" como un puntero a char, reservarle memoria, y asignarle los valores que quieras, por ejemplo, las letras del abecedario, como en tu ejemplo.

Después, hallas la longitud de "prueba" con strlen(), y dejas a "caracteres" con esa longitud (usando la función realloc() ).

Finalmente, copias el contenido con strcpy.

Saludos.


En línea

Miky Gonzalez

Desconectado Desconectado

Mensajes: 87

http://mikygonzalez.comule.com/blog/


Ver Perfil WWW
Re: Ayuda - Ajustar tamaño array - variable
« Respuesta #2 en: 4 Julio 2012, 13:01 pm »

A no ser que uses memoria dinámica, no va a poder ser...

Tendrías que declarar la variable "caracteres" como un puntero a char, reservarle memoria, y asignarle los valores que quieras, por ejemplo, las letras del abecedario, como en tu ejemplo.

Después, hallas la longitud de "prueba" con strlen(), y dejas a "caracteres" con esa longitud (usando la función realloc() ).

Finalmente, copias el contenido con strcpy.

Saludos.

Pero entonces, si yo por ejemplo: char caracteres[] = {'a' ..'z'}; le estoy dando el valor de 26. cuando copie con strcpy, me va a quedar tambien con 26 reservado aunque solo use por ejemplo 5, como haria para convertir ese 26 reservado en solo 5 por ejemplo? Si es posible algun ejemplo se agradeceria.
En línea

Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:


EN CONSTRUCCIÓN
DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Ayuda - Ajustar tamaño array - variable
« Respuesta #3 en: 4 Julio 2012, 13:16 pm »

Te pongo un ejemplo para que lo entiendas mejor:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    char *cadena; //Puntero a char
  8.    char prueba[] = "Hola Mundo"; //Contenido que queremos poner en "cadena"
  9.    int i, longitud;
  10.    char letra = 'a'; //para asignarle valores a "cadena"
  11.  
  12.    cadena = (char*) malloc (27 * sizeof(char)); //Tenemos 27 espacios para la cadena.
  13.  
  14.    for(i=0; i<26; i++)
  15.    {
  16.        cadena[i] = letra;
  17.        letra++; //Pasamos a la siguiente letra del abecedario (valor en ASCII).
  18.    }
  19.    cadena[26] = '\0';
  20.  
  21.    //Ya tenemos asignados todos los valores de "cadena". Ahora, vamos a concatenar.
  22.  
  23.    longitud = strlen(prueba); //Hallamos la longitud para después quitar memoria
  24.  
  25.    cadena = (char*) realloc (cadena, (longitud + 1) * sizeof(char));  
  26.    //Sabemos que "prueba" tiene una longitud menor que "cadena". Por tanto, con realloc() se le quita memoria a "cadena",
  27.    //ya que no vamos a necesitar tanta. Se le reserva "longitud + 1" porque strlen() coge la longitud de la cadena sin
  28.    // el '\0' final.
  29.  
  30.    strcpy(cadena, prueba); //Concatenamos
  31.  
  32.    puts(cadena); //¡Ya tenemos "Hola Mundo en cadena!
  33.  
  34.    return 0;
  35.  
  36. }
  37.  
  38.  

Si tienes alguna duda sobre cómo utilizar realloc() u otra función, pregunta.

Saludos.
« Última modificación: 4 Julio 2012, 13:21 pm por DickGumshoe » En línea

Miky Gonzalez

Desconectado Desconectado

Mensajes: 87

http://mikygonzalez.comule.com/blog/


Ver Perfil WWW
Re: Ayuda - Ajustar tamaño array - variable
« Respuesta #4 en: 4 Julio 2012, 13:19 pm »

Vale ya entendi, muchas gracias DisckGumshoe por la ayuda.
En línea

Mi blog personal, con información acerca de programación, seguridad, desarrollo y electrónica:


EN CONSTRUCCIÓN
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tamaño de array através de variable
Programación C/C++
eleon 3 3,421 Último mensaje 20 Julio 2012, 01:48 am
por rir3760
Como saber el tamaño de un array de tipo int
Programación C/C++
Blaster 4 50,224 Último mensaje 8 Noviembre 2012, 19:31 pm
por Blaster
AYUDA URGENTE TAMANO ARRAY
Foro Libre
pindonga123 1 2,287 Último mensaje 4 Noviembre 2013, 03:39 am
por @synthesize
[AYUDA] usar un Array con una variable contadora
Programación C/C++
Kougami 0 1,615 Último mensaje 15 Enero 2017, 12:40 pm
por Kougami
Ayuda con array de punteros de tamaño dinámico !
Programación C/C++
statham 1 1,793 Último mensaje 20 Marzo 2019, 21:08 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines