C 打印在超出未定义长度字符数组边界上的奇怪字符

C 打印在超出未定义长度字符数组边界上的奇怪字符,c,C,我是C语言的新手,我尝试过以下代码 #include <stdio.h> int main () { char str[] = "a"; for(int x = 0; x < 20; x++) { printf("%c\t%d\n", str[x],str[x]); } return 0; } 为此,我得到以下输出 a 97 0 0 s 115 < 60 � -62 ) 41 P 80 � -42

我是C语言的新手,我尝试过以下代码

#include <stdio.h>

int main ()
{
  char str[] = "a";
  for(int x = 0; x < 20; x++)
  {
    printf("%c\t%d\n", str[x],str[x]);
  }
  return 0;
}
为此,我得到以下输出

a   97
    0
    0
s   115
<   60
�   -62
)   41
P   80
�   -42
�   -128
0   48
�   -41
>   62
�   -119
�   -88
U   85
    0
    0
�   -105
�   -85

str[2]之后,每个执行的字符都是随机的,有人能解释一下这种行为吗。

这些随机字符只是内存中的垃圾。你从记忆中的某个地方阅读,而不是故意写的

请注意,不应该这样做。如果您试图读取/写入不应该读取/写入的内存,操作系统可能会杀死您的应用程序

str[2]之后,每次执行的字符都是随机的,请有人解释一下这种行为

这种行为无法解释;未定义读取或写入超出数组边界的内容。由于您为str分配了两个字符,一个用于字母a,另一个用于空终止符,因此读取beyond str[2]会调用未定义的行为,这意味着任何事情都可能发生,包括从鼻子里呼出恶魔