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.
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 :)