C 打印在超出未定义长度字符数组边界上的奇怪字符
我是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
#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]会调用未定义的行为,这意味着任何事情都可能发生,包括从鼻子里呼出恶魔