在未定义长度的char数组的边界上打印出奇怪的char

时间:2019-06-16 14:59:00

标签: 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
�   -128
0   48
�   -41
>   62
�   -119
�   -88
U   85
    0
    0
�   -105
�   -85

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

2 个答案:

答案 0 :(得分:1)

这些随机字符只是内存中的垃圾。您从内存中没有故意写的地方读取内容。

请注意,不应这样做。如果您尝试从内存中进行读取/写入操作,而不是要从中进行读取/写入操作,则操作系统可能会杀死您的应用程序。

答案 1 :(得分:0)

  

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

这种行为无法解释;它是不确定的,无法在数组的范围内进行读取或写入。由于您已为char分配了两个str(一个字母为“ a”,另一个为null终止符),因此超出str[2]的读取将导致未定义的行为,这意味着任何事情都可以发生,包括从你的鼻子里呼吸出恶魔。