数组在末尾显示随机字符

inv*_*tus 3 c arrays printf

我想用C上的数组测试一下,因为我刚开始学习这门语言.这是我的代码:

#include <stdio.h>
main(){
  int i,t;
  char orig[5];
  for(i=0;i<=4;i++){
    orig[i] = '.';
  }

  printf("%s\n", orig);
}
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

.....?
Run Code Online (Sandbox Code Playgroud)

就是这样.那些神秘人物是什么?我做错了什么?

Sou*_*osh 7

%sprintf()需要一个指向一个 字符串,即,指针为空的初始元件终止字符数组.您的数组未终止.

因此,在搜索终止空字符时,printf()超出范围,随后调用未定义的行为.

如果要将其用作字符串,则必须对数组进行空终止.

引用:C11,章节§7.21.6.1,(强调我的)

s

如果不存在l length修饰符,则参数应该是指向字符类型数组的初始元素的指针.280)来自数组的字符被写入(但不包括)终止空字符.如果指定了精度,则不会写入多少个字节.如果未指定精度或大于数组的大小,则数组应包含空字符.

快速解决方案

  • 将数组大小增加1 , char orig[6];.
  • 最后添加一个null -terminator.循环体后,添加orig[i] = '\0';

然后,打印结果.