• Viernes 26 de Abril de 2024, 00:54

Autor Tema:  almacenar caracteres en una cadena con memoria dinamica  (Leído 5269 veces)

steel00

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
almacenar caracteres en una cadena con memoria dinamica
« en: Jueves 4 de Septiembre de 2008, 03:24 »
0
hola a todos...

Ante todo me presento al foro, ya que es la primera vez que entro... Me llamo Carlos y soy estudiante de Ing. de software

Tengo un problema que dejaron en clase, que se trata de leer una frase(1000 caracteres como maximo) y almacenarlo en una cadena usando memoria dinamica, pero para esto no puedo pedir la cantidad de caracteres de la frase que el usuario escribira y me da problemas cuando quiero salir del bucle, ya que no se como hacer para que el compilador reconosca la tecla ENTER como fin del ingreso de caracteres....

Aca dejo el codigo:

Citar
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000

void main()
{
        int i;
        char *frase = NULL;
        char tecla[10];

        printf("Ingrese una frase, 1000 caracteres como maximo: ");
        for(i=0;i<1000 ; i++)
        {
                frase = (char*)malloc(sizeof(char)*1);
                frase = getche();
                        if(frase == 'n')
                                break;
        }

        printf("n%s",frase);



        free(frase);
        system("PAUSE");

}

Bueno el problema que tengo es que el bucle no acaba cuando apreto la tecla ENTER y cuando apreto varias veces esa tecla el programa imprime cualquier cosa en la pantalla y me da un error que esta relacionado con la memoria de la variable frase... alguien me puede guiar un poco con este problema

Gracias, saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: almacenar caracteres en una cadena con memoria dinamica
« Respuesta #1 en: Jueves 4 de Septiembre de 2008, 08:50 »
0
Código: C
  1.  
  2. frase = (char*)malloc(sizeof(char)*MAX);
  3. for(i=0;i<MAX ; i++)
  4. {
  5.     frase[i] = getch();
  6.     if(frase[i] == 'n')
  7.         break;
  8. }
  9. frase[i] = '';
  10.  
  11.  

Fundamental, hay que poner el terminador de cadena de caracteres, nunca lo olvides (en este caso he sustitído 'n' puesto que he considerado que no forma parte de la frase). Y ya que has definido constantes, úsalas.

steel00

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: almacenar caracteres en una cadena con memoria dinamica
« Respuesta #2 en: Viernes 5 de Septiembre de 2008, 01:57 »
0
Hola...

Gracias por la respuesta y perdon por la forma en como postee el codigo de mi programa, si es cierto que declare el MAX 1000 y que lo debería usar, pero me di cuenta tarde, porque cuando pegue el codigo en la pregunta me olvide que no habia reemplazado el 1000 por MAX... otra cosa, veo que por la solucion que me has dejado que el programa asigna 1000 casillas a la variable frase de forma dinamica, pero lo que yo andaba buscando es si hay alguna manera de ir ampliando la memoria conforme se van obteniendo los caracteres, por ejemplo si yo escribo una frase de 20 caracteres, la memoria solo asignaria 20 casillas, si fuesen menos caracteres menos casillas y si fueran mas caracteres, mas casillas... eso es lo que trato de hacer con el programa....

espero se haya podido explicar mi duda y gracias otra vez por la respuesta, espero poder encontrar la solucion porque la verdad es que no la he podido encontrar en la web...

Saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: almacenar caracteres en una cadena con memoria dinamica
« Respuesta #3 en: Viernes 12 de Septiembre de 2008, 15:15 »
0
Entonces asigna un solo carácter al principio y usa realloc() para ampliar la memoria reservada

http://laurel.datsi.fi.upm.es/~rpons/pe ... de119.html

Un saludo.