如何给数组的元素赋值?

时间:2019-04-07 16:31:50

标签: c

我不知道发生了什么。它向我显示abc符合我的预期,但是当我尝试分配要传递的abc值时,它向我Embedded frameworks向输出显示了意外的“ 4”。

enter code here

我收到:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

d

db4

代替:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

d

db

1 个答案:

答案 0 :(得分:2)

以字符数组表示的字符串,必须以null结尾。这包括您的abcpass数组。当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);
}