• Jueves 14 de Noviembre de 2024, 19:25

Autor Tema:  Problemita Con Codigo  (Leído 988 veces)

Master-Blaster

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Problemita Con Codigo
« en: Miércoles 28 de Junio de 2006, 22:39 »
0
Hola, soy nuevo aca (en realidad me registre porque mañana tengo que entregar un trabajo para la facultad jeje)
La idea del codigo este es que se ingrese un texto desde teclado, y se guarde en un array de strings. El problema es que cuando ingreso una linea, el programa se cuelga. Que estoy haciendo mal? alguna alocacion de memoria?
ayudaaaaa!!!!!!!!
gracias de antemano :)

EDIT: aclaracion, estoy usando Dev-C++ con Win XP

Código: Text
  1. char **ingresar_texto(int *cantidadlineas)
  2. {
  3.  
  4.   char **buffer;
  5.   char *linea;
  6.   int a, i = 1;
  7.  
  8.   
  9.   while ((a = getlin(linea)) != 0)
  10.   {
  11.     if (a == -1)
  12.     {
  13.       fprintf(stderr, "la linea ingresada es demasiado grande. No sera tomada en cuenta\nContinue ingresando el texto:\n");
  14.       
  15.     }
  16.     else
  17.     {
  18.             buffer = (char **)realloc(buffer, i * sizeof(char *)); /*aloca otra linea*/
  19.             buffer[i-1]= (char *)malloc(strlen(linea)); /*aloca lugar para la linea en el texto*/
  20.       strcpy(buffer[i-1], linea); /*copia la linea al texto*/
  21.       i++;
  22.       free(linea);
  23.     }
  24.   }
  25.   buffer = (char **)realloc(buffer, sizeof(char *) * i );
  26.     buffer[i-1] = NULL;  
  27.     *cantidadlineas = i - 1;
  28.  
  29.  
  30.   return buffer;
  31. }
  32.  
  33.  
  34. int getlin(char *linea) /*lee una linea desde teclado*/
  35. {
  36.  
  37.   char ch;
  38.   int i = 0;
  39.   int bufsize = MAX_CHAR;
  40.   linea = (char *)malloc(sizeof(char) * (bufsize + 1));
  41.  
  42.   while (((ch = getchar()) != '\n') && (ch != FINTEXTO) && (i < MAX_CHAR))
  43.   {
  44.         linea[i] = ch;
  45.     i++;
  46.   }
  47.   if (ch == '\n')
  48.   {
  49.     linea[i] = ch;
  50.     linea[i+1] = '\0';
  51.     return i;
  52.   }
  53.   else if (ch == FINTEXTO) /*caracter de salida*/
  54.   {
  55.     if (i > 0)
  56.     {
  57.     fprintf(stderr, "escriba el caracter de salida en una linea nueva");
  58.     linea[i] = '\n';
  59.     linea[i+1] = '\0';
  60.     return i;
  61.     }
  62.     else {
  63.     return 0;
  64.     }
  65.   }
  66.   else if (i >= MAX_CHAR)
  67.   {
  68.          return -1;
  69.          }
  70.   else
  71.   {
  72.     fprintf(stderr, "ERROR!");
  73.     exit(0);
  74.   }
  75. }
  76.  

Master-Blaster

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemita Con Codigo
« Respuesta #1 en: Miércoles 28 de Junio de 2006, 23:01 »
0
Ya lo solucione, tenia que hacer buffer = malloc antes de hacerle realloc :P
ahora el problema es que no me toma el caracter de salida, lo tengo definido asi

#define FINTEXTO 'ç'

Master-Blaster

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemita Con Codigo
« Respuesta #2 en: Jueves 29 de Junio de 2006, 00:56 »
0
Ya que nadie contesta voy a seguir con mis avances :P

El caracter de salida si me lo toma.. pero tambien sale si hago dos enters seguidos, y si pongo el caracter de salida en una linea con otros caracteres me dice "escriba el caracter de salida en una linea nueva", como yo quiero que haga, pero no espera que se haga, sale igual.
Ah, y cuando hago imprimir_texto con la funcion

Código: Text
  1. void imprimir_texto(char **texto)
  2. {
  3.      int i = 0;
  4.      while (texto[i] != NULL)
  5.      {
  6.            printf("%s", texto[i]);
  7.            i++;
  8.      }  
  9. }
  10.  
me imprime cualquier cosa... por lo que supongo que estoy guardando mal el texto..

por favor, necesito ayuda urgente :(


EDIT: el problema esta en como paso "linea" como parametro a getlin, porque si imprimo "linea" dentro de getlin la imprime bien, pero si la imprimo dentro de ingresar_texto imprime cualquier cosa..