EX10.3 字符数组字节数 ?
本帖最后由 我爱橙 于 2022-6-13 15:42 编辑对两个数组a和b进行如下初始化:
char a[ ]="ABCDEF";
char b[ ]={'A','B','C','D','E','F'};
则以下叙述正确的是.
A.
数组a与数组b完全相同
B.×
数组a与数组b长度相同
C.×,"ABCDEF"是字符串常量,'A','B','C','D','E','F'是6个字符
数组a与数组b中都存放字符串
D.√
数组a比数组b长度长
#include <stdio.h>
#include <string.h>
int main()
{
char a[]="ABCDEF";
char b[]={'A','B','C','D','E','F'};
printf("字节数各是a=%d,b=%d\n", sizeof(a), sizeof(b)); //字节数各是a=7,b=6
printf("长度数各是a=%d,b=%d\n", strlen(a), strlen(b)); //长度数各是a=6,b=6
return 0;
}
strlen不区分是数组还是指针,就读到‘\0’为止的长度,且不把'\0'计入长度; 本帖最后由 傻眼貓咪 于 2022-6-10 13:35 编辑
数组 a 多了一个 ' \0' 空符在最后面
strlen() 计算字符不包括空符 ' \0' 傻眼貓咪 发表于 2022-6-10 13:20
数组 a 多了一个 '/0' 空符在最后面
strlen() 计算字符不包括空符 '/0'
所以长度是不相同吗?
傻眼貓咪 发表于 2022-6-10 13:20
数组 a 多了一个 '/0' 空符在最后面
strlen() 计算字符不包括空符 '/0'
b数组是不是不合法啊,不应该也得有 '\0'吗? 我爱橙 发表于 2022-6-10 13:27
b数组是不是不合法啊,不应该也得有 '\0'吗?
如果只是存放字符的数组,当然是合法,但如果是想以字符串输出,就不合法了,后面必须多个 '\0'
b[] = { 'b', 'a', 'n', 'a', 'n', 'a', '\0' }
printf("%s", b} 我爱橙 发表于 2022-6-10 13:24
所以长度是不相同吗?
如果你说的长度是指数组里面的元素(不包括 '\0')当然是一样长度,所以 strlen() 才会一样 本帖最后由 临时号 于 2022-6-10 13:46 编辑
答案是D,a数组比b数组长度长
原因:
因为在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。
所以现在的a和b其实是这样的
char a[ ]={'A','B','C','D','E','F','\0'};
char b[ ]={'A','B','C','D','E','F'};
所以,a数组的长度是6,b数组的长度是7。
所以:
A 不完全相同
B 长度不一样
C 需要最后一个数组元素是'\0'才能算是C语言的字符串 其实 C 语言没有字符串类型(它不懂辨认什么是字符串)所以在一些字符串函数里,如:printf() 想打印字符串,都是用指针,然后必须让编译器知道从指针位置到什么位置该打印(至于打印到什么位置?其实就是到 '\0' 位置)
你可以试试欺骗编译器
例子:
char b[] = {'A', 'B', 'C', '\0', 'D', 'E', 'F' };
printf("%s", b);
看看它会打印什么? 傻眼貓咪 发表于 2022-6-10 13:46
其实 C 语言没有字符串类型(它不懂辨认什么是字符串)所以在一些字符串函数里,如:printf() 想打印字符串 ...
真的只到ABC{:9_228:} 我爱橙 发表于 2022-6-10 13:51
真的只到ABC
哈哈
页:
[1]