Buenas, tengo el siguiente codigo:
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: 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: 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).
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.
Cita de: DickGumshoe 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.
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.
Te pongo un ejemplo para que lo entiendas mejor:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *cadena; //Puntero a char
char prueba[] = "Hola Mundo"; //Contenido que queremos poner en "cadena"
int i, longitud;
char letra = 'a'; //para asignarle valores a "cadena"
cadena = (char*) malloc (27 * sizeof(char)); //Tenemos 27 espacios para la cadena.
for(i=0; i<26; i++)
{
cadena[i] = letra;
letra++; //Pasamos a la siguiente letra del abecedario (valor en ASCII).
}
cadena[26] = '\0';
//Ya tenemos asignados todos los valores de "cadena". Ahora, vamos a concatenar.
longitud = strlen(prueba); //Hallamos la longitud para después quitar memoria
cadena = (char*) realloc (cadena, (longitud + 1) * sizeof(char));
//Sabemos que "prueba" tiene una longitud menor que "cadena". Por tanto, con realloc() se le quita memoria a "cadena",
//ya que no vamos a necesitar tanta. Se le reserva "longitud + 1" porque strlen() coge la longitud de la cadena sin
// el '\0' final.
strcpy(cadena, prueba); //Concatenamos
puts(cadena); //¡Ya tenemos "Hola Mundo en cadena!
return 0;
}
Si tienes alguna duda sobre cómo utilizar realloc() u otra función, pregunta.
Saludos.
Vale ya entendi, muchas gracias DisckGumshoe por la ayuda.