J'ai l'entrée suivante:
AG23,VU,Blablublablu,8
IE22,VU,FooBlaFooBlaFoo,3
and so on...
Je veux qu'il "analyse" avec scanf()
en utilisant un code comme celui-ci:
char sem[5];
char type[5];
char title[80];
int value;
while(scanf("%s,%s,%s,%d", sem, type, title, &value) == 4) {
//do something with the read line values
}
Mais l'exécution du code me donne: illegal instruction
Comment liriez-vous un fichier séparé par des virgules comme celui-ci?
La virgule n'est pas considérée comme un espace, donc le spécificateur de format "%s"
consommera le ,
et tout le reste de la ligne écrivant au-delà des limites du tableau sem
provoquant un comportement indéfini. Pour corriger cela, vous devez utiliser un scanset:
while (scanf("%4[^,],%4[^,],%79[^,],%d", sem, type, title, &value) == 4)
où:
%4[^,]
signifie lire au plus quatre caractères ou jusqu'à ce qu'une virgule soit rencontrée.La spécification de la largeur empêche le dépassement de tampon.