Вызов функции sprintf - PullRequest
       5

Вызов функции sprintf

0 голосов
/ 03 октября 2019

Я использую запросы MySQL в R для вставки данных в базы данных, а также строковые переменные для вставки данных в базы данных.

Я получаю эту ошибку:

формат не строковый литерал и аргументы форматирования [-Wformat-security]

Вот код

void add_data_to_the_table(MYSQL * connection){
    char schlName[200]={};
    printf("Enter the school name  \n");
    scanf("%s",schlName);
    char query_string[] = { "INSERT INTO schools(schoolName) VALUES(%s)" };
    sprintf(schlName, query_string);
    if (mysql_query(connection,buf)) 
    {
     validate(connection);
    }
}

Я ожидал вставить строку в таблицу schools вбазы данных, но вместо этого я получил ошибку выше.

1 Ответ

2 голосов
/ 03 октября 2019

Для начала эта инициализация массива

char schlName[200]={};

неверна в C. Список инициализаторов в фигурных скобках может быть не пустым. Вместо этого напишите

char schlName[200]={ '\0' };

При вызове sprintf порядок аргументов недопустим. Кажется, вы имеете в виду

sprintf( result_string, query_string, schlName );

вместо

sprintf( schlName, query_string);

, где result_string - строка, куда будет перенаправлен вывод.

Объявление функции sprintfвыглядит следующим образом

int sprintf(char * restrict s, const char * restrict format, ...);

Так что, если аргумент, соответствующий формату параметра, имеет спецификатор преобразования, такой как %s, вам необходимо указать как минимум три аргумента.

Обратите внимание начто этот звонок

scanf("%s",schlName);

небезопасен. Используйте fgets вместо scanf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...