PDA

View Full Version : [C] problemi fscanf


tenbota87
10-02-2011, 12:57
Salve a tutti, sono nuovo del forum..
Vi scrivo per chiedere chiarimenti su un pezzo di codice che il compilatore mi segna come "segmentation fault".
premetto che sono obbligato ad utilizzare il compilatore cygwin
il file da cui vado a leggere è composto da un centinaio di parole divise tra loro da un numero ogni volta diverso di spazi.

utilizzo la fscanf per velocizzare l'esecuzione visto che con la fgetc il tempo di esecuzione cresce notevolmente.

ogni parola trovata andrà poi salvata su un altro file.


potreste aiutarmi a capire il mio errore? ve ne sarei molto grato! :)

credo che il problema dovrebbe essere nel ciclo while.
Grazie a tutti in anticipo




#include <stdio.h> //Direttive al pre processore che ci permettono di includere
#include <string.h> //gli haeder file,relativi a librerie standar.
#include <stdlib.h>
#include <limits.h>
#include <assert.h>




int main(int argc, char *argv[])
{
char *nomeDelFile; //puntatore al nome del file da comprimere o decomprimere
char *centoParole;
char *stampa;
char *pra;
FILE *fileTesto;
FILE *fpw ;


if(argc!=2) //controllo sul numero di parametri per far partire il programma che devono essere: <nome programma> <nome file>
{
printf("\nErrore!Indicare il nome del file da comprimere o da decomprimere\n");
exit(1);
}

nomeDelFile=argv[1]; //copio il contenuto di argv[1] che contiene il nome del file da comprimere/decomprimere


centoParole = (char*)malloc(sizeof(char)*(strlen(nomeDelFile)+7));
strncpy(centoParole,nomeDelFile,strlen(nomeDelFile));
strncat(centoParole,".world\0",7);




fileTesto=fopen(nomeDelFile,"r"); //apertura del file di testo in modalità lettura

fpw=fopen(centoParole,"w"); //apertura del file di testa in cui devo andare a scrivere


fflush(stdout);

while(!feof(fileTesto))
{
//QUI IL COMPILATORE VA IN SEGMENTATION FAULT
fscanf(fileTesto,"%s", pra);


printf("\n Parola: %s \n", pra);

stampa=(char*)malloc(sizeof(char)*(strlen(pra)));
strncpy(stampa,pra,strlen(pra));

fprintf(fpw," %s \n",pra);



}



fclose(fileTesto);
fclose(fpw);

return 0;
}

wingman87
10-02-2011, 14:35
Non hai allocato spazio per le parole che vai a mettere in pra.

tenbota87
10-02-2011, 14:49
Innanzitutto GRAZIE MILLE! funziona perfettamente ora!

ho fatto così :

pra = (char*) malloc( 256 * sizeof(char));

e va!

volevo chiederti:
nel file .world che viene creato, le parole sono precedute e seguite da uno spazio, è possibile eliminarli o magari la fscanf funziona solo così?

spero di essere stato chiaro..

wingman87
10-02-2011, 14:57
Innanzitutto GRAZIE MILLE! funziona perfettamente ora!

ho fatto così :

pra = (char*) malloc( 256 * sizeof(char));

e va!

volevo chiederti:
nel file .world che viene creato, le parole sono precedute e seguite da uno spazio, è possibile eliminarli o magari la fscanf funziona solo così?

spero di essere stato chiaro..
Il problema non è nella fscanf ma nella fprintf in cui hai messo uno spazio prima e dopo la parola:
fprintf(fpw," %s \n",pra);
spazio %s spazio \n

tenbota87
10-02-2011, 15:06
:doh:

scusami ma mi si è fuso il cervello!

grazie mille ancora!