Ошибка при использовании scanf(const char* , ...)
#include <iostream>
int main() {
const char *c = "";
scanf(c);
return 0;
}
При компиляции выводится ошибка:
--------------------------------
warning: format string is not a string literal (potentially insecure) [-Wformat-security]
scanf(c);
^
1 warning generated.
IDE предлагает решение, но оно не помогает:
#include <iostream>
int main() {
const char *c = "";
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wformat-security"
scanf(c);
#pragma clang diagnostic pop
return 0;
}
- Если кто-нибудь знает решение, просьба помочь
- Либо вариант заменить scanf (кроме cin)
Ответы (1 шт):
Первым аргументом scanf принимает флаг, обозначающий формат принимаемых данных. Допустимы следующие флаги:
%c: считывает один символ
%d: считывает десятичное целое число
%i: считывает целое число в любой системе (десятичной, шестнадцатеричной, восьмеричной)
%u: считывает положительное целое число
%e: считывает число с плавающей точкой в экспоненциальной форме
%E: считывает число с плавающей точкой в экспоненциальной форме с заглавным символом экспоненты
%f: считывает число с плавающей точкой
%F: считывает число с плавающей точкой
%g: считывает число с плавающей точкой
%G: считывает число с плавающей точкой
%o: считывает восьмеричное число
%x: считывает шестнадцатеричное число
%X: считывает шестнадцатеричное число
%s: считывает строку
%%: считывает символ процента
Рабочий пример:
int age;
printf("Input your age:");
scanf("%d", &age);
Вы же передали в качестве флага пустую строку. Очевидно, что это не работает
Подробнее о работе функции можете посмотреть тут.