Diese Warnung ist die Art und Weise, wie gcc Ihnen sagt, dass das Formatierungszeichenfolgenargument für die printf-Stilfunktion (printf, fprintf usw.) nicht überprüft werden kann. Diese Warnung wird generiert, wenn der Compiler nicht manuell in die Zeichenfolge hineinspähen und sicherstellen kann, dass während der Laufzeit alles ordnungsgemäß ausgeführt wird. Schauen wir uns ein paar Beispiele an.
printf("This string has no format");
Fall 2:
Fall 1. Diese Zeichenfolge kann bei der Kompilierung und der Compiler wird es ermöglichen, ohne Warnung überprüft werden Für diesen Fall kann der Compiler feststellen, dass Sie eine haben Formatbezeichner und wird eine andere Warnung auslösen. Auf meinem Rechner hieß es "Warnung: zu wenig Argumente für Format".
// This will most probably crash your machine
printf("Not a safe string to %s");
Fall 3. Nun ist dies etwas, Ihr Fall. Sie nehmen eine Zeichenfolge, die zur Laufzeit generiert wird und versucht, sie zu drucken. Die Warnung, die Sie erhalten, ist der Compiler, der Sie warnt, dass in der Zeichenfolge ein Formatbezeichner vorhanden sein könnte. Sprich zB für "bad% sdata". In diesem Fall versucht die Laufzeitumgebung, auf ein nicht vorhandenes Argument zuzugreifen, das mit% s übereinstimmt. Schlimmer noch, dies könnte ein Benutzer sein, der versucht, Ihr Programm auszunutzen (was dazu führt, dass es Daten liest, die nicht sicher gelesen werden können).
char str[200];
scanf("%s", str)
printf(str)
Was enthält 'imp'? – casablanca
Was passiert, wenn Sie fprintf durch 'fputs (imp, fil);' ersetzen? – pmg
eine Zeichenfolge, nehmen wir an, sowas wie imp = "test"; – Unzi