Это предупреждение - способ, с помощью которого gcc сообщает, что не может проверить аргумент строки формата функции стиля printf (printf, fprintf ... и т. Д.) Это предупреждение генерируется, когда компилятор не может вручную заглянуть в строку и убедиться, что все пойдет так, как вы запланировали во время выполнения. Давайте посмотрим на пару примеров.
Случай 1. Эта строка может быть проверена во время компиляции, и компилятор разрешит это без предупреждения:
printf("This string has no format");
Случай 2. В этом случае компилятор может обнаружить, что у вас есть спецификатор формата, и выдаст другое предупреждение. На моей машине было написано «предупреждение: слишком мало аргументов для формата».
// This will most probably crash your machine
printf("Not a safe string to %s");
Случай 3. Теперь это несколько ваш случай. Вы берете строку, сгенерированную во время выполнения, и пытаетесь ее распечатать. Вы получаете предупреждение о том, что компилятор предупреждает вас, что в строке может быть спецификатор формата. Скажем, например, "плохой% sdata". В этом случае среда выполнения попытается получить доступ к несуществующему аргументу, соответствующему% s. Хуже того, это может быть пользователь, пытающийся использовать вашу программу (заставляя ее читать данные, которые небезопасны для чтения).
char str[200];
scanf("%s", str)
printf(str)