Ciao, stavo scrivendo un programma che riceve in input una frase in codice morse e restituisce in output la frase traslitterata, ma ho un problema del quale non riesco a venire a capo...
per comodità mi sono limitato alle prime 3 lettere dell'alfabeto scrivendo quanto segue
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main (void)
{
char frase[100] ;
char *FraseTok[20] ; // vettore immagazzinamento token
char *morse[] ={ ".-", "-...", "-.-." };
char *alfa[] = { "a", "b", "c" } ;
int c00, c01, c02, x ;
int p1 ;
puts("scrivi una frase in alfabeto morse");
fgets ( frase, 20 , stdin) ;
puts (frase);
FraseTok[0] = strtok ( frase , " " ) ;
// dividere la frase in token
c00 = 1 ; // prepara il contatore
while ( FraseTok != NULL ) {
FraseTok[c00] = strtok ( NULL , " " ) ;
if (FraseTok[c00] == NULL) {
break ;
}
else {
c00++;
}
}
x = c00 ;
for ( c01 = 0 ; c02 <= x ; c01++) {
for ( c02 = 0 ; c02 <= 2 ; c02++) {
p1 = strcmp (FraseTok[c01], morse[c02]) ;
if ( p1 == 0 ) {
printf ("%s", alfa[c02]);
}
}
c01++;
}
puts ("");
return 0;
}
digitavo : ".- -... -.-."
aspettandomi come output "abc"
l'output di questo programma risultava essere sempre un segmentation fault ho scoperto che era dovuto al valore di x = c00 che se sostituito da x = c00 - 1 concludeva il programma, ma con l'output :
ab
ovviamente saltando la c...
allora ho aggiunto una stampa forzata di FraseTok, perchè non riuscivo a capire da dove nascesse il problema :
c01 = 0 ;
printf ("%d) %s\n",c01,FraseTok[c01]);
c01++;
printf ("%d) %s\n",c01,FraseTok[c01]);
c01++;
printf ("%d) %s\n",c01,FraseTok[c01]);
c01++;
printf ("%d) %s\n",c01,FraseTok[c01]);
che mi da questo output :
0) .-
1) .-
2) .-
3) (null)
Ora qualcuno sa spiegarmi perchè leggendo un vettore[4] l'output è :
0 , 1 , 2, \n , 3 ?