背景
char a[5]={'s','h','a','r','k'};
printf("%s\n",a);
输出
shark烫烫烫?"7#T?
char a[5]={'s','h','a','r','\0'};
printf("%s\n",a);
输出则为shar
原因
在C语言中,一个字符串是以'\0'(空字符)结尾的字符数组。当我们使用字符串格式化输出时,例如使用printf("%s\n", a),程序会从数组a的起始位置开始输出字符,直到遇到'\0'为止。
在第一个代码片段中,数组a的长度为5,但是没有显式地在最后一个字符后面添加'\0',因此在打印输出时,会一直输出到最后一个字符('k')为止,然后继续向后输出数组中的内存内容,直到遇到内存中的'\0'为止。因此会输出"shark",然后继续输出随机的内存内容,导致输出为"shark烫烫烫?"7#T?"。
而在第二个代码片段中,在数组a的最后一个字符('r')后面显式地添加了'\0',因此在打印输出时,会输出从数组起始位置到遇到'\0'为止的内容,即"shar"。 |