Быстрый вопрос, почему scanf_s выдает здесь исключение во время выполнения? Я очень смущен - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь использовать scanf (или другой вариант, такой как scanf_s) для отправки массива символов из потока stdin в (заранее определенную) переменную массива символов.

Выдается ошибка (неисследованное исключение)во время выполнения окнами, как только пользователь нажимает ввод;он срабатывает, как только функция scanf () вызывается ..

Я новичок в работе с C и просто пытаюсь разобраться с основами работы с переменными на более низком уровне, это забавно, но иногда расстраивает

Должен ли я просто сделать свою собственную функцию scanf?- Как можно это сделать?

Ниже приведен код, который не работает, в его простейшей форме, которую так легко прочитать ... (Буквально только часть scanf, которая выдает исключение .. ГА!)

Ниже кода находится сообщение об ошибке

#include <stdio.h> 
#include <stdlib.h>

int main()
{
    char string[20];

    printf("%s\n", string);

    scanf_s("%s", &string);



    system("Pause");
    return 0;
}

Ошибка:

Exception thrown at 0x1011E63C (ucrtbased.dll) in Project.exe: 0xC0000005: Access violation writing location 0x00760000.
Unhandled exception at 0xFEFEFEFE in Project.exe: 0xC00001A5: An invalid exception handler routine has been detected (parameters: 0x00000003).

1 Ответ

2 голосов
/ 17 мая 2019

Несколько вещей:

  1. Почему вы вызываете printf в неинициализированном буфере string?Это неопределенное поведение.
  2. Чтобы правильно использовать scanf_s для чтения строки, используйте это: scanf_s("%19s\n", string, 20);.Общий шаблон "%s", buffer, X, где X - емкость буфера.Также обратите внимание, что это string, а не &string.

То есть, если вы настаиваете на использовании scanf_s вообще;fgets лучше для чтения строк.

...