c语言数组问题

#include <stdio.h>
#include <string.h>
void main()
{
int i=0;
char a[12]={'a',' ','b','o','o','k','!'};
printf("%d\n",strlen(a));
while(a[i]!='\0')
printf("%c",a[i++]);
}
//上面为代码
问题是:
①为什么字符数组a的长度输出为7,而不是12?
②我一个一个字符赋值,不是应该不会自动加'\0'字符吗?
③是不是因为编译器的原因?

用strlen()函数返回的是字符数组中实有的字符个数,且不包括'\0'<,算法是从第一个字符开始计数,直到'\0'。而关键字sizeof发挥的是字符数组实际的存储空间个数,单位是sizeof(数据类型)。

#include <stdio.h>
#include <string.h>

void main() {
int i = 0;
char a[12] = {'a',' ','b','o','o','k','!'};
printf("%d\n",strlen(a));
printf("%d\n",sizeof(a));
while(a[i] != '\0')
printf("%c",a[i++]);
printf("\n");
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-13
①函数strlen计算的是实际字符的个数而不是数组的长度
②字符数组初始化时没被赋值的元素默认为 \0
③这不是编译器的原因本回答被提问者采纳
第2个回答  2019-04-12
#include #include void main() { int i=0; char a[12]={'a',' ','b','o','o','k','!'}; printf("%d\n",strlen(a)); while(a[i]!='\0') printf("%c",a[i++]); } //上面为代码 问题是: ①为什么字符数组a的长度输出为7,而不是12? ②我一个一个字符赋值,不是应该不会自动加'\0'字符吗? ③是不是因为编译器的原因?
第3个回答  2019-11-06
你知道数组不能直接负给数组赛、先求a数组的长度、用strlen函数、在把它负给c数组、在用一个for语句、从a数组元素的最后一个开始、到b数组下标、用连接函数strcat、在把它负给c数组、在输出c
第4个回答  2019-04-13
因为你 char a[12]={'a',' ','b','o','o','k','!'}; 里面的内容只有7个字符。如果你的char a[12]这么写:char a[12]={'a',' ','b','o','o','k','!','!','!','!','!','!'}; 这样他的输出就变成12了。定义char a[12] 只是预留12个位置给你输入字符。具体长度是看你到底给这个a数组填充了多少个字符。如果你只填充7个字符那么a数组的长度还是为7。如果填充12个字符那么a数组长度自然为12。如果超过12个字符那么a数组就会报错。
相似回答