C语言关于数组赋初值的问题char buff[10]={0};

2025-03-13 08:20:58
推荐回答(5个)
回答1:

需要注意的是:char buff[5]={0};和char buff[5]={'0'};是两个完全不同的概念:
char buff[5]={0};的赋的是一个字符串的结束符,而不是一个字符'0';
char buff[5]={'0'};才是给第一个字符赋值为'0'。
大家喜欢用char buff[5]={0};主要是想制造一个空的字符串,
你调试一下就知道了:
如果这样写:
#include
void main
{
char buff[5]={0};
printf("%s",buff);
}
是没有任何输出的,因为printf遇到的buff的第一个字符就是个字符串的结束符'\0'
而如果这样写:
#include
void main
{
char buff[5]={'0'};
printf("%s",buff);
}
才会看到输出了一个'0'
这才是你理解的给第一个单元赋值为‘0’。
char buff[5]={0};是一种定义空字符数组的严谨的写法!

回答2:

当buff作为字符串使用的时候,第一个字符被赋值为0(好像就是'\0'),这个字符串就是一个空串,也算是一种合理的初始化方式。

当然如果不是作为字符串,而是作为数组,就存在你说的问题了。

回答3:

char buff[10]={0};
是可以把这个数组的所有元素的赋值成0的。

不信你用下面的代码测试一下。

#include

void main()
{
char buff[5]={0};
int i;
for(i=0;i<=4;i++)
{
printf("%d",buff[i]);
}
}

因为有一条规则:在数组定义的时候如果同时赋初值,未被赋值的元素都是0

回答4:

一、全局或静态数组
char gBuf[5] = {0}; // 第一个元素gBuf[0] = 0,后续4个单元都会被置成0
二、函数局部数组
int func()
{
char buf[5] = {0}; // 第一个元素gBuf[0] = 0,后续4个单元随机值(编译器相关)
}
字符串义'\0' == 0结束,字符数组buf第一个元素为结束符,代表buf存储内容为空字符串。

回答5:

char buff[5]={0};这样写赋初值,虽说没有给buff[1]-buff[4]赋值,但是默认是赋值0的,这样写没问题。很多教材上都有的。