【发布时间】:2013-06-30 05:05:40
【问题描述】:
#include<stdio.h>
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
解释这种行为的原因(输出)?
【问题讨论】:
-
你的程序应该给出编译错误。因为,当 s 仅由 2 个元素组成时,s[4] 或 s[5] 不存在
-
位置 s[4] 可能只是有一个不可打印的字符。
-
@AswinMurugesh:我已经在问题中给出了ideone链接。它正在编译和执行成功。
-
我无法理解这种行为。这是如何工作的?
-
我猜它是 Ideone 编译器的 Array 越界奇怪行为之一。
标签: c string printf output character-arrays