我不知道发生了什么。它向我显示abc符合我的预期,但是当我尝试分配要传递的abc值时,它向我Embedded frameworks
向输出显示了意外的“ 4”。
enter code here
我收到:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
d
db4
代替:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
d
db
答案 0 :(得分:2)
以字符数组表示的字符串,必须以null结尾。这包括您的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);
}