Стек вокруг переменной 'DM' поврежден - PullRequest
0 голосов
/ 14 апреля 2020

Продолжайте получать ошибку 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' был поврежден, и я не уверен, почему, поскольку все еще должен быть только один символ в массиве из одного символа, который я определил в начале?

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

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

scanf(" %c", &DM);

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

char DM[] = "Y";

ИЛИ

char DM[2];
0 голосов
/ 14 апреля 2020

Вам необходимо определить размер массива в скобках, иначе это не сработает. Объявите это там, где вы инициализировали массив. Так что char [1] DM = "1";

...