c语言定义字符数组,为什么未赋值的元素变成a输出?

c语言定义字符数组,在vc6.0中,如a[5]={'t','a','k','e'},谭浩强书上说,未被赋值的元素自动定为空字符'\0',为什么我输出后的结果成了takea,空字符变成a输出,输出菱形的时候也是,未定义的空字符都变成了a,求大神解答!
程序是这样的,很简单:
#include<stdio.h>
int main()
{
char c[6]={'I',' ','a','m'};
int i;
for (i=0;i<6;i++)
printf("%c",c[i]);
printf("\n");
return 0;
}

字符数组c有6个元素,定义了前4个,按谭浩强书里说的,后两个元素应该自动为空字符,输出' I am', 但实际输出的却是

C语言里面的栈区存放的变量(局部变量,函数的形参)是不会自动清零,所以在内存a[4]上,是什么就是什么,你的内存当时刚好是个'a'。会对内存清零的内存块是BSS段,既未初始化的全局变量
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-05-08

c语言编程基础 第三版 说的是。如果用单个字符常量对其初始化,花括号里有几个字符常量这个数组的长度就是多少,如果用字符串初始化的话系统自动在末尾加\0


第2个回答  2018-12-31
你初始化的是字符不是字符串 未被初始化的数组元素默认为0(根据不同环境结果不一样) 字符串是以\0终止 格式控制符为%s 字符串不可以部分输出 如果想输出字符串
char c[6]={"i am"};
printf("%s\n", c);
你的代码应该这样写
第3个回答  2014-03-13
晒晒你的程序吧,这样写看不出你的问题出在哪里?追问

代码贴了,请指教!

追答

经测试,代码无错,看看是否你的C编译器是否有问题吧

附上测试图:


不过,有必要像t书那样逐字符输出字符串吗?

printf的%s和puts貌似更合理一些。

本回答被提问者采纳
第4个回答  2014-03-13
能把代码弄出来么?可能是你的代码有问题哦!追问

代码贴了,多谢指教!

相似回答