Questo avviso è il modo di gcc di dirti che non è possibile verificare l'argomento della stringa di formato per la funzione di stile printf (printf, fprintf ... ecc.). Questo avvertimento viene generato quando il compilatore non può controllare manualmente la stringa e assicurarsi che tutto vada come si desidera durante il runtime. Vediamo un paio di esempi.
Caso 1. Questa stringa può essere verificata al momento della compilazione e il compilatore lo permetterà senza preavviso:
printf("This string has no format");
Caso 2: Per questo caso, il compilatore in grado di rilevare che si dispone di un specificatore di formato e genererà un avviso diverso. Sulla mia macchina diceva "avviso: troppo pochi argomenti per il formato".
// This will most probably crash your machine
printf("Not a safe string to %s");
Caso 3. Ora, questo è un po 'il tuo caso. Stai prendendo una stringa generata in fase di esecuzione e provando a stamparla. L'avvertenza che stai ricevendo è il compilatore che ti avverte che potrebbe esserci uno specificatore di formato nella stringa. Supponiamo per es. "% Sdata scaduto". In questo caso, il runtime proverà ad accedere a un argomento inesistente per corrispondere a% s. Ancora peggio, questo potrebbe essere un utente che cerca di sfruttare il tuo programma (facendolo leggere dati che non sono sicuri da leggere).
char str[200];
scanf("%s", str)
printf(str)
fonte
2010-12-11 22:37:45
Cosa significa 'imp' contiene? – casablanca
Cosa succede se si sostituisce fprintf con 'fputs (imp, fil);'? – pmg
una stringa, supponiamo che qualcosa come questo imp = "test"; – Unzi