char a[3]={'a','b','c'}; 不是只可以存放2个字符 另一个是\0吗

3到底是3个字节还是3个字符啊 为什么?

char a[3] 是声明 a 是 char 型数组,有3个元素。
char 型数组 可以用来存放一个字符串,也可以用来存放1个1个的字符。

char a[3]={'a','b','c'}; 存放3个字符, 可以。
char a[3]="abc"; 存放字符串,字符串有4个字节,含结束符\0. 这样初始化,结束符没地方放,丢弃了。
char a[3]="ab"; 存放字符串,字符串有3个字节,含结束符\0. (提倡用法)。
char a[4]="abc"; char a[]="abc"; (提倡用法)。
-----------------------
#include <stdio.h>
int main(){
char a[3]= {'a','b','c'};
printf("%c %c %c\n",a[0],a[1],a[2]); //按字符 方式输出

printf("%s\n",a); // 按字符串方式输出
return 0;}
==============
#include <stdio.h> int main(){char a[3]="abc";
printf("%c %c %c\n",a[0],a[1],a[2]); //按字符 方式输出
printf("%s\n",a); // 按字符串方式输出
return 0;}
MS VC++ 6.0 输出都是:
a b cabc追问

为什么我们提倡用结束符 char a[]="abc" 那是不是可以a[1] a[2] a[3] 直接用了

追答

printf() 函数 有缺陷。所以,有的编译器用 printf_s 。
char a[]="abc";
char a[4]="abc";
有结束符。 printf("%s",a); 任何情况下,不会出错。
这样声明,你一样可以单独使用 a[1] , a[2] ,a[3]。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-27
确实是只可以存放2个字符,最后一个是零。你说的没有错呀=。=
字符数组最后一项一定要是'\0'
你这么写会报错。error c2078: error C2078: too many initializers就是初始值设定太多。
3,表示的是三个字符。追问

为什么只能存放2个

追答

通常字符数组中的所存储的内容也可以称为字符串;
字符串是一串字符,需要在后面一个位置加上‘\0’来表示一个字符串的结束。
'\0'也是需要占空间的呀,所以,你chara[3],定义了三个空间,就要留一个给'\0',所以就剩下两个空间啦。=。=

追问

初始值设定太多 那一般应该怎么设定的?

追答

=.=char a[3],你定义了3个空间,最后一个空间要给'\0',就剩两个了,所以你在初始化的时候给他的初始值就不能超过两个呀,要是超过了,‘\0’的不就被占用了么。
没有一般怎么设定,只要不超过你定义的空间,你想咋设定就咋设定= =。

本回答被提问者采纳
第2个回答  2014-01-05
不 你理解 有点 问题 当 存储的是 字符串 的时候
才会自动 在后面加上 \0
而字符串的标志是 " "
除此之外 都当做 存储 单个 字符 处理
就和 整型 数组一个道理了。。。。
3 是 三个 字符
第3个回答  2014-01-05
c语言中一个字符就是一个字节 你这样写可以 有什么疑问??