You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:25:29