Esta advertencia es la forma en que gcc le dice que no puede verificar el argumento de cadena de formato para la función de estilo printf (printf, fprintf ... etc.). Esta advertencia se genera cuando el compilador no puede echar un vistazo a la cadena manualmente y asegurarse de que todo transcurrirá según lo previsto durante el tiempo de ejecución. Veamos un par de ejemplos.
Caso 1. Esta cadena puede ser verificada en tiempo de compilación y el compilador lo permitirá sin previo aviso:
printf("This string has no format");
Caso 2: Para este caso, el compilador puede detectar que usted tiene una especificador de formato y mostrará una advertencia diferente. En mi máquina decía "advertencia: muy pocos argumentos para el formato".
// This will most probably crash your machine
printf("Not a safe string to %s");
Caso 3. Ahora bien, esto es algo su caso. Está tomando una cadena generada en tiempo de ejecución e intentando imprimirla. La advertencia que está recibiendo es el compilador advirtiéndole que podría haber un especificador de formato en la cadena. Digamos por ejemplo "bad% sdata". En este caso, el tiempo de ejecución intentará acceder a un argumento inexistente para que coincida con% s. Peor aún, podría tratarse de un usuario que intenta explotar su programa (haciendo que lea datos que no son seguros de leer).
char str[200];
scanf("%s", str)
printf(str)
¿Qué significa 'imp' contener? – casablanca
¿Qué sucede si sustituyes el fprintf por 'fputs (imp, fil);'? – pmg
una cadena, supongamos algo como esto imp = "prueba"; – Unzi