¿Por qué cambian los caracteres?

Iniciado por goto C, 2 Septiembre 2013, 23:46 PM

0 Miembros y 1 Visitante están viendo este tema.

goto C

Hola, estoy desesperado... si alguien me puede explicar que pasa en este programa...
Os pongo una parte del código, que es lo que falla, y es que los caracteres que se guardan en el while no son los que se muestran en el for que hay después... y no sé por qué!!!! Que desesperación!!!! Ya no sé qué hacer jajaja.

#include<stdio.h>
#include<stdlib.h>

int main()
{
   char *texto; //texto a cifrar
   char nombre[20]; //nombre que le vamos a dar al fichero de texto
   FILE *pf; //puntero de tipo FILE, necesario para manejar ficheros
   int i=0, numerocaracteres=0;

   printf("Introduce el nombre del archivo\n");
   printf("segun la forma nombre.tipo)\n");

   scanf("%s", &nombre);
   getchar();

   pf=fopen(nombre,"r");

   //comprobamos que no haya errores al abrir el fichero
   if(pf==NULL)
   {
      printf("Error al abrir el fichero. Pulsa Enter para salir\n");
      getchar();
      exit(1);
   }

   texto=(char *)malloc(1*sizeof(char));
   while(!feof(pf) && !ferror(pf))
   {
      texto[numerocaracteres]=fgetc(pf);
      printf("texto[numerocaracteres] es %c\n", texto[numerocaracteres]);
      getchar();
      numerocaracteres++;

      texto=(char *)realloc(texto,numerocaracteres*sizeof(char));
   }

   for(i=0;i<numerocaracteres;i++)
      printf("texto[i] es %c\n", texto[i]);
   getchar();

   fclose(pf);

//..........................


Muchas gracias y saludillos.

ecfisa

Hola goto C.

Proba de este modo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  FILE *fp;
  char *texto, nombre[255];
  int i, nc = 0;

  printf("Nombre de archivo: ");
  fgets(nombre, 20, stdin);
  nombre[strlen(nombre)-1] = '\0';

  if ((fp = fopen(nombre,"rt")) == NULL) {
    perror("Error: ");
    return 1;
  }

  if ((texto = (char *) malloc(sizeof(char))) == NULL) {
    printf("Memoria insuficiente.");
    return 1;
  }

  while (!feof(fp)) {
    texto[nc++] = fgetc(fp);
    if ((texto = (char*)realloc(texto, (nc+1)*sizeof(char))) == NULL) {
      printf("Memoria insuficiente.");
      return 1;
    }
  }

  for(i = 0; i < nc; i++)
    printf("Texto[%d] es %c\n", i, texto[i]);

  fclose(fp);

  return 0;
}


Saludos :)