|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 21
|
[C] problemi fscanf
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 Codice:
#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;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Non hai allocato spazio per le parole che vai a mettere in pra.
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 21
|
Innanzitutto GRAZIE MILLE! funziona perfettamente ora!
ho fatto così : Codice:
pra = (char*) malloc( 256 * sizeof(char)); 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.. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Quote:
Codice:
fprintf(fpw," %s \n",pra); |
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Feb 2011
Messaggi: 21
|
scusami ma mi si è fuso il cervello! grazie mille ancora! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:08.




















