Título: ¿Por qué cambian los caracteres?
Publicado por: goto C en 2 Septiembre 2013, 23:46 pm
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.
Título: Re: ¿Por qué cambian los caracteres?
Publicado por: ecfisa en 4 Septiembre 2013, 18:49 pm
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 ) { return 1; } if ((texto = (char *) malloc(sizeof(char))) == NULL ) { printf("Memoria insuficiente."); return 1; } 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 ]); return 0; }
Saludos :)
|