c - C 字符串程序的输出

标签 c string printf output character-arrays

#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

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

最佳答案

您正在数组范围之外写入/读取,这只是 undefined behavior您无法对程序将做什么做出任何预测。

关于c - C 字符串程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17432222/

相关文章:

c - 我如何让 C 中的多个线程处理二维数组的同一个 for 循环?

c# - 在 javascript 中执行 split() 并忽略空白条目的最佳方法是什么?

c - 显示使用 asprintf 创建的时间字符串

c - sprintf 与 %*.s 格式说明符一起使用时写入空白字符串

c - 在 scanf 中传递但不在 printf 中传递的地址

c - 一个数字的 printf 输出错误

c - 为什么一维奇偶校验的大O运行时是log(n)?

c - C中的未知值链表

objective-c - 如何在 Objective-C 中返回 C 风格的整数数组?

C++ 字符串数组,从文件中加载文本行