Hola tengo una duda de como funciona fread.
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
lo que quiero hacer es leer un bloc de notas, pero nose que poner en las 2 del medio.
ejemplo:
char texto[100];
FILE * pFile;
fread(texto, *, *, pFile);
donde puse los "*" (asteriscos), ahi ¿que numeros van?, o ¿de que depende el numero que voy a poner ahi?, o ¿que significa "size_t size, size_t count"?;
o alguna otra manera de leer un bloc de notas?
gracias!
Puedes usar fstream
http://www.cplusplus.com/reference/iostream/fstream/
Citarsize_t fread ( void * ptr, size_t size, size_t count, FILE * stream )
*ptr -> puntero a la cadena donde se almacenara lo leido.
size -> tamaño de los datos a leer. si quieres leer en este caso caracteres de un bloc de notas, deberias poner un
sizeof(char) o un 1 ya que ese es el tamaño de char.
count -> numero de bloques de tamaño
size a leer. como has puesto antes lo de sizeof(char), en este caso deberas poner el numero de caracteres que quieres leer.
*stream -> puntero al archivo.
en resumen, te quedaria algo asi:
char cadena[MAX];
FILE *f=fopen("archivo.txt", "r");
fread(cadena, sizeof(char), MAX-1, f); //MAX-1 para dejar el caracter nulo al final de la cadena
ademas, no te olvides que fread() devuelve el numero de bytes leidos. esto es util para saber cuando acaba un fichero. en este caso podrias hacer algo asi:
int bytesLeidos;
char cadena[MAX];
FILE *f=fopen("archivo.txt", "r");
do {
bytesLeidos=fread(cadena, sizeof(char), MAX-1, f);
} while (bytesLeidos>0);
espero que te sirva... un saludo!
Gracias XeRaCKeR y xiruko,
pero entonces creo que estoy intentando usar la funcion incorrecta,
1. haber si me quedo claro, fread me regresa el # de bytes leidos?
2. entonces estoy usando la funcion equivocada, lo que yo quiero hacer es es lo siguiente:
imaginemos que el bloc de notas contiene lo siguiente:
"Hola, soy yo."
estoy buscando una funcion que me regrese ese
"hola, soy yo."
checare el fstream y si alguien sabe como hacer eso que estoy intentando agradezo la ayuda.
fread() te hace eso. en el puntero de la cadena que le pasas como argumento te dejara lo que hay escrito en el bloc de notas; y la funcion devolvera el numero de bytes leidos.
un saludo!
por cierto, el fread si me esta funcionando, pero me regresa mas de lo que ocupo (me regresa caracteres raros)
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
FILE * hola;
char leer[100];
hola = fopen("notepad.txt","a+");
// fputs (leer, hola);
rewind(hola);
fread(leer,sizeof(char), 99,hola);
puts(leer);
fclose(hola);
system("pause");
return 0;
}
para esto tengo un notepad que se llama "notepad" y ahi tengo el texto que quiero leer.
gracias por la aclaracion xiruko.
Cita de: Erres en 5 Octubre 2012, 15:58 PMpor cierto, el fread si me esta funcionando, pero me regresa mas de lo que ocupo (me regresa caracteres raros)
La razón es, al no darle un valor inicial a cada elemento del array "leer", estos inician con un valor no definido o basura. Para corregir eso debes cambiar la declaración a, por ejemplo:
char leer[100] = "hola";
Y se deben tener en cuenta dos detalles en relación a la función "fread":
1) La función lee los caracteres y los almacena tal cual, no agrega el '\0' como es el caso con "fscanf" y "fgets" (lo cual puede ser bueno o malo, dependiendo del caso).
2) La función retorna el numero de
elementos leídos y almacenados, esto es:
numero de caracteres leídos / tamaño del elemento
Si el tamaño del elemento es 1 el valor retornado es el numero de caracteres pero no es así si el tipo del elemento es, por ejemplo, "signed int".
Un saludo
gracias rir3760 y a todos por la ayuda
para los que quieran leer de un .txt aqui esta el codigo que resulto:
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
FILE * hola;
char leer[100] = "hola";
hola = fopen("notepad.txt","a+");
rewind(hola);
fread(leer,sizeof(char), 100-1,hola);
puts(leer);
fclose(hola);
system("pause");
return 0;
}
gracias, creo que ya se puede cerrar este tema.