Я получаю ошибку исключения при использовании% S - PullRequest
0 голосов
/ 22 января 2019
int main()
 {
 int Age;
 char Name;

 //Age

 printf("Type your age: ");
 scanf_s("%d", &Age);
 printf("Your age is %d\n", Age);

 //Name

 printf("Type your Name: ");
 scanf_s("%s", &Name);
 printf("Your name is %s", Name);

 return 0; }

Это раздел «Имя», который выдает ошибку.Я не могу понять, почему.

ОБНОВЛЕНИЕ: я пишу в Visual Studio.Следовательно, "scanf_s" по сути требуется.

Ошибка «Исключение, выданное в 0x5B49D4EC (ucrtbased.dll) в Project1.exe: 0xC0000005: Произошло нарушение записи в месте записи 0x001A0000.»

Ответы [ 4 ]

0 голосов
/ 22 января 2019

Устранена проблема, перейдя в ...

Инструменты-> Параметры-> Отладка-> Символы и установите флажок «Серверы Microsoft Symbol», Visual Studio автоматически загрузит PDB.

Спасибо всем за помощь:)

0 голосов
/ 22 января 2019

Во-первых, я бы просто использовал scanf (), а не scanf_s ().Кроме того, вам нужно преобразовать переменную Name в строку, представляющую собой массив символов, как я определил это ниже.Использование только char name означает, что вы создали переменную с местом для одного символа.

Надеюсь, это поможет:)

 int main()
 {
     int Age;
     char Name[10];


     printf("Type your age: ");
     scanf("%d", &Age);
     printf("Your age is %d\n", Age);

     //Name

     printf("Type your Name: ");
     scanf("%s", &Name);
     printf("Your name is %s", Name);

     return 0;
}
0 голосов
/ 22 января 2019

Проблема в том, что вы определили Name как char - один символ - но вы пытаетесь использовать его как строку (несколько символов).

Чтобы это исправить, вы должны либо (а) определить Name как массив символов (который будет строкой) - например, char Name[100]; или (b) как указатель (например, char *Name;) - что потребует от васmalloc() строка перед использованием и free() ее после использования.

Строки могут быть хитрыми, так как они в основном являются массивами char s, но для этого нужно либо знать, либо найти способзнать, сколько символов будет в строке.Вы можете прочитать больше о том, как это сделать здесь, в документации для scanf_s , где приведен этот пример:

char c[4];
scanf_s("%4c", &c, (unsigned)_countof(c)); // not null terminated
0 голосов
/ 22 января 2019

Ваша проблема в том, что char Name; может хранить только один символ.Ваш код позволяет пользователю вводить несколько символов, которые сохраняются в Name, вызывая ошибку памяти.

Измените char Name; на что-то вроде char Name[50], чтобы вы могли сохранить до 49 символовплюс null байт.

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

Обратите внимание, вывсегда следует проверять возврат из scanf_s(), чтобы вы знали, если пользователь ввел правильные данные или нет.

Этот код работает правильно в Visual Studio:

#include "stdafx.h"
#include <string.h>
#include <stdlib.h>


int main()
{
    int Age;
    char Name[50];

    printf("Type your age: ");
    if(scanf_s("%d", &Age))
    {
        printf("Your age is %d\n", Age);

        printf("Type your Name: ");
        if (scanf_s("%s", Name, (unsigned)_countof(Name)))
        {
            printf("Your name is %s\n", Name);
        }
        else
        {
            printf("Name:: Invalid Input\n");
        }
    }
    else
    {
        printf("Age:: Invalid Input\n");
    }

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