Исключение в c scanf_s - PullRequest
       2

Исключение в c scanf_s

0 голосов
/ 27 апреля 2019

Я пытаюсь написать простой код для ввода значений типа int и char. Visual studio выбрасывает исключение

#include<stdio.h>
int main() {

    int i;
    char c;

    printf(" Enter the values");
    scanf_s("%c %d",&c,&i);

    return 0;
}

Когда я запускаю программу и входные значения, Visual Studio выдает исключение, говорящее: Исключение, выданное в 0x599C939E (ucrtbased.dll) в main.exe: 0xC0000005: Место записи нарушения прав доступа 0x0032133E

Ответы [ 2 ]

3 голосов
/ 27 апреля 2019

Вам необходимо указать размер памяти, который вы хотите выделить для вашего символа.

 scanf_s("%c %d",&c,1,&i);

Не вернет никаких ошибок.Поскольку функция scanf () является «небезопасной», VS заставляет вас использовать функцию scanf_s, которая является более безопасной опцией.Таким образом, пользователь не сможет обмануть ввод.

1 голос
/ 27 апреля 2019

Для спецификаторов формата как c and s необходимо указать размер буфера после соответствующего указателя в списке аргументов.

В вашем случае вызов функции будет выглядеть как

scanf_s("%c %d",&c, 1, &i);

Для спецификатора формата s размер буфера также должен учитывать конечный ноль.

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