C/Visual C - memoria dinamica y mayusculas

 
Vista:

memoria dinamica y mayusculas

Publicado por joselillo (3 intervenciones) el 03/02/2004 20:17:08
hola!queria saber si alguien me podia dar una solucion a una cosilla que no tengo ni idea como se hace, mi problema es que tengo un array limitado de enteros, conforme voy ocupando las posiciones del array puede ser que el programa necesite seguir poniendo elementos en el array y no halla mas sitio, ¿en ese caso habra que asignarle memoria dinamica al array no?bien he aqui mi problema se que se una la funcion void *malloc(site_t size)¿pero como se usa?me parece que te devuelve un puntero a la zona de memoria que se te da, si es asi, ¿como hago para ampliar el array y poder insertar nuevos elementos?. Mi otra duda venia sobre si hay alguna funcion que compare cadenas alfabeticamente y no tenga en cuenta las mayusculas y minusculas, es decir que Juan y juan sean la misma cadena. Gracias por la atencion. Un saludo.


Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:memoria dinamica y mayusculas

Publicado por Adrian (1 intervención) el 03/02/2004 22:08:11
El malloc se usa de la siguiente manera, ejemplo de definicion de un string:

char *string;
int Tamanio=20;

string = malloc(sizeof(char)*Tamanio);

En este caso estoy definiendo el tamaño de un string de tamaño 20. La variable string debe ser si o si definida como puntero.

Con respecto a la 2da pregunta, lo que te conviene hacer es por ejemplo pasar el string a mayuscula y compararlos de esa forma con la siguente instruccion:

string= _strupr(string); //Paso a Mayuscula

Espero que te sirva.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:memoria dinamica y mayusculas

Publicado por chuidiang (677 intervenciones) el 04/02/2004 09:09:43
Para incrementar el tamaño de un array, efectivamente debes usar malloc().

A malloc() le pasas el tamaño en bytes que deseas, reserva una memoria de ese tamaño y te devuelve un puntero a ella. Si quieres 20 enteros, debes pasarle 20 multiplicado por el numero de bytes de cada entero, es decir 20 * sizeof(int)

Imagina tu array inicial, como te comenta Adrian

int Tamanho = 20;
int *array = (int *)(malloc (Tamanho * sizeof(int));

Imagina ahora que necesitas incrementar el tamaño. Haces un array auxiliar con más tamaño (por ejemplo 10 mas)

int *aux = (int *) (malloc ( (Tamanho+10) * sizeof(int));

Ahora tienes que copiar sobre este array los valores que tenias en el otro. Podrias usar algo como memcpy(), que lo hace de un golpe, pero tambien te vale un bucle

for (i=0;i<Tamanho; i++)
aux[i] = array[i];

El antiguo array ya no te vale, asi que liberas su memoria. Cada malloc() reserva memoria y debe tener un free() que la libere cuando no sea necesaria

free (array);

Ahora haces que array, que es un puntero, apunte a tu nuevo array.

array = aux;

Y ahora haces que Tamanho valga su nuevo valor

Tamanho = Tamanho + 10;

El array tiene ahora 10 huecos al final y es de tamaño 30.

sigue...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:memoria dinamica y mayusculas

Publicado por chuidiang (677 intervenciones) el 04/02/2004 09:10:17
... viene de antes

No liberes aux, puesto que array y aux están apuntando a la misma zona de memoria, la del segundo malloc(). Si liberas aux, liberas esa zona de memoria y te has quedado sin array.

Puedes mirar a ver si tienes la funcion realloc(), que hace todo esto que te he comentado automaticamente.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:memoria dinamica y mayusculas

Publicado por joselillo (3 intervenciones) el 04/02/2004 19:03:42
Muchas gracias por contestar, ya he solucionado el problema, al final he usado mejor la funcion realloc,(ni sabia que existia) la he visto en un manual y supuestamente te reasigna memoria con el mismo puntero. Sobre la segunda de mis cuestiones tambien la he solucionado, encontre por ahi en la ayuda del Red Hat una funcion strcasecmp() que actua igual que strcmp() y no tiene en cuenta mayusculas y minusculas a la hora de comparar las cadenas.Muchas gracias de nuevo por tu aclaracion.Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 5 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

RE:memoria dinamica y mayusculas

Publicado por zzz (318 intervenciones) el 05/02/2004 04:53:30
hola! la función que compara cadenas sin tomar en cuenta mayusculas es:
strcmpi(cadena1, cadena2)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar