在阅读了这个c-faq 问题后,我回来了,我完全对这里发生的事情感到困惑。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main ()
{
char ar[3]="NIS", *c;
printf ("%s\n", ar);
strcpy (c, ar);
printf ("%s\n", c);
if (ar[4] == '\0')
{
printf ("Null");
}
else
{
printf ("%c\n", ar[4]);
}
}
在这里,我分配了“NIS”等大小的声明数组。当我尝试访问 ar[3],ar[4] 时它给出 null 为什么?在 ar[3] 的情况下没关系,但为什么在 ar[4] 的情况下是这样的另一个想法:在 c-faq 中提到,如果您分配任何等于声明数组大小的字符串,则不能使用 printf (" %s") 和 strcpy() 在该数组上,如 c-faq 中所述。但是在我上面的代码中,我在这里使用了 printf 和 strcpy 都可以正常工作。可能是我解释错了,请纠正我。另一个问题是,当我尝试将 ar[5] 与 null 进行比较时,它没有打印任何可以的东西,但为什么它为 ar[4] 打印 Null。我对这个“NIS”字符串的想法将像这样存储在内存中。 .
提前致谢。
--------------------------------------------------------
| N | I | S | /0 | Garbage value here
|_______|________|_______|________|_____________________
ar[0] ar[1] ar[2] ar[3]
好吧,当我将 ar[3] 与 '\0' 进行比较时,它给出了 null 没关系,但是当我将它与 ar[4] 比较时,它仍然给我 null 而不是一些垃圾值..