C语言中未设空终止符的字符数组为何输出垃圾值?
为何无空终止符的char数组用printf("%s")会输出垃圾值?
printf("%s")的工作逻辑很直接:它从你传入的指针指向的内存位置开始,逐个打印字符,直到遇到空终止符('\0')才会停止输出。
你的代码里,char array[4]是一个长度为4的字符数组,已经被'J'、'O'、'h'、'n'四个字符完全填满,没有多余的空间存放'\0'。当printf开始输出时,打印完数组里的4个字符后,会继续读取数组边界之外的内存(这属于未定义行为),直到在某个随机位置碰巧读到'\0'为止——这中间读到的不确定内容就是你看到的“垃圾值”。
解决方法
- 方法一:扩大数组长度并手动添加空终止符
#include<stdio.h> int main(){ char array[5]; array[0] = 'J'; array[1] = 'O'; array[2] = 'h'; array[3] = 'n'; array[4] = '\0'; // 手动添加空终止符 printf("%s\n",array); return 0; }
- 方法二:用字符串字面量初始化数组(编译器自动添加'\0')
#include<stdio.h> int main(){ char array[] = "John"; // 编译器自动在末尾追加'\0',数组实际长度为5 printf("%s\n",array); return 0; }
内容的提问来源于stack exchange,提问作者Harshana_prabhath
相关产品推荐
相关产品推荐

