Ошибка доступа Access при чтении строки в C - PullRequest
0 голосов
/ 01 ноября 2018

Согласно книге: How to C Programming - Eighth Edition (by Deitel brothers) этот код читает слово "Hello":

#define SIZE 20

int main()
{
   char MyStr[SIZE];

   printf("Enter your word: ");
   scanf("%19s", MyStr);
}

Это изображение из Шестого издания онлайн :

enter image description here

Но когда я это сделаю:

int main()
{
   char MyStr[20];

   printf("Enter your word: ");
   scanf_s("%19s", MyStr);
}

Я получаю сообщение об ошибке нарушения прав доступа:

enter image description here

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Добавьте _CRT_SECURE_NO_WARNINGS к параметрам компоновщика, и это позволит вам использовать scanf и другие «небезопасные» методы, если вы не хотите использовать безопасные. Visual Studio по умолчанию предпочитает использовать безопасные

0 голосов
/ 01 ноября 2018

Существует разница между scanf и scanf_s. Последнее требует указания длины. Таким образом, ваш код должен быть изменен на:

int main()
{
   char MyStr[20];

   printf("Enter your word: ");
   scanf_s("%19s", MyStr, sizeof(MyStr));
}

или

int main()
{
    char MyStr[20];

    printf("Enter your word: ");
    scanf("%19s", MyStr);
}
...