Ошибка при использовании 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);

Вы же передали в качестве флага пустую строку. Очевидно, что это не работает

Подробнее о работе функции можете посмотреть тут.

→ Ссылка