Стек вокруг переменной «DM» был поврежден

Продолжайте получать ошибку Run-Time Check Failure #2 - Stack around the variable 'DM' was corrupted.

Код

    int Repeats;
    double x_max;
    char DM[] = ""; 

    printf("\nPlease enter the number of repeats: ");
    scanf("%d", &Repeats);
    printf("\nPlease enter the length: ");
    scanf("%lf", &x_max);
    printf("\nAccount for Dark Matter?(Y/N) ");
    scanf("%s", DM);

    char lower_DM = tolower(DM[0]);

    DM[0] = lower_DM;

    printf("DM: %c", DM[0]);

Я просто хочу, чтобы он принимал один символ, Y/N (опустите его для сравнения, чтобы пользователь мог без проблем вводить Y, y, N или n), но как только запускается полный код, в конце он просто говорит, что стек вокруг «DM» был поврежден, и я не уверен, почему, поскольку в массиве из одного символа, который я определил в начале, все еще должен быть только один символ?

Спасибо


person SamuraiMelon    schedule 13.04.2020    source источник
comment
DM слишком мал, вам нужно больше памяти   -  person Ôrel    schedule 14.04.2020


Ответы (1)


Когда вы объявляете DM как: char DM[] = "";. Размер символа массива слишком мал. Для запроса «да» или «нет» вы должны использовать char DM, этого достаточно. Когда вы объявляете DM как персонажа, используйте scanf, например:

scanf(" %c", &DM);

Но если вы хотите работать со строкой, вы можете объявить DM как:

char DM[] = "Y";

OR

char DM[2];
person Hitokiri    schedule 13.04.2020
comment
Если вы используете второй подход, вам также следует использовать %1s в scanf, чтобы не переполнить буфер, если пользователь случайно введет больше символов. - person Nate Eldredge; 14.04.2020
comment
Да. Вместо строки мы должны использовать fgets - person Hitokiri; 14.04.2020