Bueno, he leido y he probado en mi ejemplo practico lo que tu me has dicho, pero me han surgido unos problemas.
Por ejemplo, si yo uso ATOI al hacer el argv[2], al compilar me da "Error de segmentacion". No se que es eso, pues en el EMACS de linux cuando programaba en PASCAL nunca me aparecio un error asi.De todos modos, si no uso ATOI, parece que me funciona el parametro, pue s si envio al ejecutar ./practica fichero 2, al sacar por pantalla el segundo argumento, es decir, el 2, me lo saca sin problemas.
El verdadero problema viene con el for. Expongo ahora las dos pruebas que hice, ambas con identico resultado.
1- Tengo un fichero.txt que sera el que uso para ejecutar, que dentro contiene un string que dice: HOLA ME LLAMO JORGE
2- aqui pongo mi programilla y como leo el fichero de las dos maneras que probe:
#include <unistd.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
//Puntero a comprobacion fichero//
FILE *abrefichero(char nombre[])
{
FILE *fichero=NULL;
if ((fichero=fopen(nombre,"r"))==NULL)
{
fprintf(stderr,"Imposible abrir el fichero\n");
exit(1);
}
return fichero;
}
///////////////////////////////////////////función main/////////////////////////////////////////
int main(int argc,char *argv[])
{
FILE *fich;
int N,cont;
short cadena[256];
if (argc!=3)
{
fprintf(stderr,"Parametros insuficientes\n");
exit(1);
}
//Veamos el valor del segundo parametro: N //
N=(argv[2]);
printf("El valor del parametro N es:%s\n",N);
//Asignamos el valor del parametro 1 al fichero y procedemos a comprobar su existencia//
fich=abrefichero(argv[1]);
for(cont=0;cont<10;cont++)
{
fscanf(fich,"%s",&cadena);
printf("%s",cadena);
}
}
Ahora, el fichero, en vez de con un for, lo recorrere como en el ejemplo que me pasaste:
char * buffer;
//Asignamos el valor del parametro 1 al fichero y procedemos a comprobar su existencia//
fich=abrefichero(argv[1]);
while(!feof(fich))
{
fread(buffer,N,1,fich);
print("%s\n",buffer);
}
}
En ambos programas, lee el fichero.txt que le mande, pero al sacarlo por pantalla saldria:
HOLA,MELLAMOJORGEJORGEJORGEJORGEJORGEJORGE
Es decir, se come los espacios y me repite jorge 5 o 6 veces.¿Sabrias decirme por que?
Por cierto, el fread(buffer,N,1,fich); almacena el cotenido del fichero en buffer, vale. Pero,¿Que sifnican la N y el 1? de N en N a partir de la posicion 1?
Muchas gracias por tu ayuda, es mi segundo dia aprendiendo C y espero avanzar rapido. Yo creo que una vez entienda esto ya podre seguir solo. Resulta bastante intuitivo. Algo menos que pascal, pero no parece complicadisimo.