输出C字符串程序

#include int main() { char s[2]="a"; s[1]='b';s[2]='c';s[3]='d';s[5]='e'; printf("%s $%c$",s,s[4]); return 0; } 

1.当我在C(gcc-4.7.2)中运行该程序时,由于缺少空字符(’\ 0’),我预期运行时错误。

2.如果程序仍然成功编译并执行,因为s [4]尚未初始化,我预计那个地方会有一些垃圾值。但这里我也错了。

上述程序的输出是:abcde $$两个$(dollor)之间没有字符表示printf跳过s [4]。 这是一个相同的ideone链接: http ://ideone.com/UUQxb2

解释这种行为的原因(输出)?

您正在数组的边界外编写/读取,这只是未定义的行为,您无法对程序将执行的操作做出任何预测。

访问超出数组的范围是未定义的行为。 只是一个示例,我的系统上相同代码的输出是abcd(e▒x $($

长度为8的字符串是因为缺少NULL终止符和字符( $之间是垃圾值s[4]

  1. 发生运行时错误不是必需的。 C没有绑定检查。
  2. 在C中定义了许多字符。如同声音哔声\a如果我记得正确,那么屏幕上实际上没有必要打印某些内容。 这可能是你从未听过的声音。