Buenas a todos,
resulta que estoy teniendo un error con este codigo, tal vez no estoy viendo algo o me falta un concepto.
La idea seria leer un texto por usuario y guardarlo en un archivo binario,
segundo, mostrarlo por consola,
y lo mas importante extraer todas y cada una de las palabras del texto ingresado por usuario.
Ahora bien, tengo entendido que los archivos binarios son mejores para guardar registros ( estructuras) y los archivos txt para texto. Lamentablemente, me piden que sean archivos binarios... Cosa que no le veo mucho sentido.
El error es que si ingreso un texto de mas de 3 o 4 palabras aveces algunas palabras se muestran con basura. Por ejemplo si ingreso "la casa roja y el perro blanco" no hay problema.
Si ingreso "la raiz cuadrada de una potencia" entonces la palabra "cuadrada" muestra basura tambien. Esto por poner algunos ejemplos.
Este el codigo, (por cierto mucho que mejorar)
gracias, saludos.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define ARCH0 "arch0.bin"
#define TAM_MAX 1000
void crearArchivo()
{
FILE
* pfile
= fopen(ARCH0
, "wb"); char texto[TAM_MAX];
if( pfile )
{
printf("\nIngrese el texto:\n");
fwrite(&texto
,sizeof(texto
),1,pfile
);
}
}
void mostrarArchivo()
{
FILE
* pfile
= fopen(ARCH0
, "rb"); char texto[TAM_MAX];
if( pfile )
{
fread(&texto
, sizeof(texto
),1,pfile
);
}
}
void limpiarArreglo(char a[],int j)
{
while( j - 1 >= 0 )
{
a[j] = 0;
j--;
}
}
void archivoToDic()
{
FILE
* pfile
= fopen(ARCH0
,"rb"); char texto[TAM_MAX];
int i = 0; /**contador texto*/
char aux[30]; /**para guardar cada termino del texto*/
int j = 0; /**contador string aux*/
if( pfile )
{
fread(&texto
, sizeof(texto
),1,pfile
);
{
{
/*copia cada letra leida distinta de espacio a la cadena auxiliar*/
aux[j] = texto[i];
j++;
i++;
}
/*tras salir del while, aux contiene 1 palabra del texto, es decir, los caracteres hasta
el primer espacio encontrado*/
/*limpiar el arreglo y volver el contador j a 0*/
while( j - 1 >= 0 )
{
aux[j] = 0;
j--;
}
j = 0;
/*el proceso sigue con todos los terminos*/
i++;
}
}
}
int main()
{
crearArchivo();
printf("\nContenido Archivo:\n"); mostrarArchivo();
archivoToDic();
return 0;
}
Por ultimo decir que pense como solucion utilizar memoria dinamica de manera que solo se guarden en el archivo estrictamente los caracteres del texto ingresado y no otra basura que me pueda estar guardando. qué opinan al respecto?