我想用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)
就是这样.那些神秘人物是什么?我做错了什么?
%s与printf()需要一个指向一个 字符串,即,指针为空的初始元件终止字符数组.您的数组未终止.
因此,在搜索终止空字符时,printf()超出范围,随后调用未定义的行为.
如果要将其用作字符串,则必须对数组进行空终止.
引用:C11,章节§7.21.6.1,(强调我的)
s如果不存在l length修饰符,则参数应该是指向字符类型数组的初始元素的指针.280)来自数组的字符被写入(但不包括)终止空字符.如果指定了精度,则不会写入多少个字节.如果未指定精度或大于数组的大小,则数组应包含空字符.
快速解决方案
char orig[6];.orig[i] = '\0';然后,打印结果.