Cet avertissement indique à gcc qu'il ne peut pas vérifier l'argument chaîne de format de la fonction de style printf (printf, fprintf ... etc). Cet avertissement est généré lorsque le compilateur ne peut pas jeter un coup d'œil dans la chaîne et s'assurer que tout ira comme prévu pendant l'exécution. Regardons quelques exemples.
Cas 1. Cette chaîne peut être vérifiée au moment de la compilation et le compilateur lui permettra sans avertissement:
printf("This string has no format");
Cas n ° 2: Dans ce cas, le compilateur peut détecter que vous avez spécificateur de format et soulèvera un avertissement différent. Sur ma machine il a dit "avertissement: trop peu d'arguments pour le format".
// This will most probably crash your machine
printf("Not a safe string to %s");
Cas 3. Maintenant, c'est un peu votre cas. Vous prenez une chaîne générée lors de l'exécution et essayez de l'imprimer. L'avertissement que vous obtenez est le compilateur vous avertissant qu'il pourrait y avoir un spécificateur de format dans la chaîne. Dites par exemple "mauvais% sdata". Dans ce cas, le runtime essayera d'accéder à un argument inexistant pour correspondre au% s. Pire encore, il peut s'agir d'un utilisateur qui tente d'exploiter votre programme (l'amenant à lire des données qui ne sont pas sûres à lire).
char str[200];
scanf("%s", str)
printf(str)
Qu'est-ce que 'imp' contient? – casablanca
Que se passe-t-il si vous remplacez fprintf par 'fputs (imp, fil);'? – pmg
une chaîne, supposons quelque chose comme ça imp = "test"; – Unzi