Как присвоить значения элементам массива? - PullRequest
0 голосов
/ 07 апреля 2019

Я не знаю, что происходит.Он показывает мне, что abc соответствует ожиданиям, но когда я пытаюсь присвоить некоторые значения abc для передачи, он показывает мне enter code here неожиданный «4» на выходе.

#include <stdio.h>

int main(void)
{
    char abc[52];
    for (int i = 0; i < 52; i++)
    {
        if (i < 26)
        {
            abc[i] = 'a' + i;
        }
        else
        {
            abc[i] = 'A' + i - 26;
        }
    }
    printf("%s\n", abc);
    char pass[2];
    pass[0] = abc[3];
    printf("%s\n", pass);
    pass[1] = abc[1];
    printf("%s\n", pass);
}

Я получаю:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

d

db4

вместо:

1014 *1014* 101 * * * * * * * * * * * 155 * LVF * LVXWZW6W6W6W6W6W6W6W6W6W6H0K0WRXF0R0K0HRQF0R0K0RKHQQR0K0RKHQQR0K0R0K0RKHQQFRKHQQR0K0RKHQQR0K0RKHQ0дБ

1 Ответ

2 голосов
/ 07 апреля 2019

Строки, представленные в виде символьных массивов, должны заканчиваться нулем.Это включает в себя ваши abc и pass массивы.printf ничего не знает о размере вашего массива, когда ему передается abc.Он просто печатает символы, начинающиеся с этого адреса, пока не достигнет значения \0.То же самое для pass

Если abc печатал правильно без добавления нулевого символа, то это, вероятно, просто повезло.Это технически неопределенное поведение.

Давайте исправим ваш код ....

int main(void)
{
    char abc[52+1]; // 53
    for (int i = 0; i < 52; i++)
    {
        if (i < 26)
        {
            abc[i] = 'a' + i;
        }
        else
        {
            abc[i] = 'A' + i - 26;
        }
    }
    abc[52] = '\0';
    printf("%s\n", abc);

    char pass[2+1]; //3
    pass[0] = abc[3];
    pass[1] = '\0'; // null terminate pass before printing
    printf("%s\n", pass);

    pass[1] = abc[1];
    pass[2] = '\0'; // null terminate pass again before printing
    printf("%s\n", pass);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...