Y3PP4
10-08-2009, 21:34
Giorno,
sto facendo delle prove scrivendo un piccolo parser (niente di chè, solo escape di stringhe).
Attualmente ho messo a punto un algoritmo semplice semplice che prevede tramite un
while(!feof( fp )) la chiamata a varie funzioni, una delle quali è fgets.
Ottenuta la stringa poi passo tutto a un'altra funzione che tramite un ciclo for così definito:
for( i=0; i<strlen( line ); i++ )
richiama continuamente uno switch(line[i]) e in seguito testa: se il carattere non è una tabulazione o spazio lo salva in un'altro puntatore e al termine del ciclo for ritorna la stringa.
Qui sorge il problema. Se provo a stampare le varie stringhe ottengo tutto con successo, ma ahimè l'ultima linea mi viene stampata due volte.
Qualcuno sà da cosa possa dipendere il problema?
Di seguito posto il problema semplificato (per non complicare le cose):
// importo gli header necessari
void cleanString( char *line, char *escapedLine );
int main()
{
// ... fp è argv[1]
char line[500];
char *escapedLine;
while( !feof( fp ) )
{
fgets( line, sizeof( line ), fp );
// alloco la memoria
escapedLine = malloc ( strlen( line ) + 1 ) * ( sizeof( char ) ) );
cleanString( line, escapedLine ); //
printf("%s\n", escapedLine);
free( escapedLine );
}
return( EXIT_SUCCESS );
}
void
cleanString( char *line, char *escapedLine )
{
unsigned int i;
unsigned int a = 0; // counter per cleanLine
for( i=0; i<strlen( line ); i++ )
{
switch( line[i] )
{
case ' ' :
case '\t':
case '\n':
break;
default:
cleanLine[a] = line[i];
a++;
break;
}
}
return;
}
Questo è quanto.
Supponendo di avere un file con semplici frasi come potrebbe essere:
Giorno a tutti,
oggi mi sento
bene.
Ottengo come risultato:
Giornoatutti,
oggimisento
bene.
bene. <-- ripetuto due volte!
Grazie a tutti, buona notte.
sto facendo delle prove scrivendo un piccolo parser (niente di chè, solo escape di stringhe).
Attualmente ho messo a punto un algoritmo semplice semplice che prevede tramite un
while(!feof( fp )) la chiamata a varie funzioni, una delle quali è fgets.
Ottenuta la stringa poi passo tutto a un'altra funzione che tramite un ciclo for così definito:
for( i=0; i<strlen( line ); i++ )
richiama continuamente uno switch(line[i]) e in seguito testa: se il carattere non è una tabulazione o spazio lo salva in un'altro puntatore e al termine del ciclo for ritorna la stringa.
Qui sorge il problema. Se provo a stampare le varie stringhe ottengo tutto con successo, ma ahimè l'ultima linea mi viene stampata due volte.
Qualcuno sà da cosa possa dipendere il problema?
Di seguito posto il problema semplificato (per non complicare le cose):
// importo gli header necessari
void cleanString( char *line, char *escapedLine );
int main()
{
// ... fp è argv[1]
char line[500];
char *escapedLine;
while( !feof( fp ) )
{
fgets( line, sizeof( line ), fp );
// alloco la memoria
escapedLine = malloc ( strlen( line ) + 1 ) * ( sizeof( char ) ) );
cleanString( line, escapedLine ); //
printf("%s\n", escapedLine);
free( escapedLine );
}
return( EXIT_SUCCESS );
}
void
cleanString( char *line, char *escapedLine )
{
unsigned int i;
unsigned int a = 0; // counter per cleanLine
for( i=0; i<strlen( line ); i++ )
{
switch( line[i] )
{
case ' ' :
case '\t':
case '\n':
break;
default:
cleanLine[a] = line[i];
a++;
break;
}
}
return;
}
Questo è quanto.
Supponendo di avere un file con semplici frasi come potrebbe essere:
Giorno a tutti,
oggi mi sento
bene.
Ottengo come risultato:
Giornoatutti,
oggimisento
bene.
bene. <-- ripetuto due volte!
Grazie a tutti, buona notte.