我爱橙 发表于 2022-6-10 13:03:53

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:20:07

本帖最后由 傻眼貓咪 于 2022-6-10 13:35 编辑

数组 a 多了一个 ' \0' 空符在最后面
strlen() 计算字符不包括空符 ' \0'

我爱橙 发表于 2022-6-10 13:24:23

傻眼貓咪 发表于 2022-6-10 13:20
数组 a 多了一个 '/0' 空符在最后面
strlen() 计算字符不包括空符 '/0'

所以长度是不相同吗?

我爱橙 发表于 2022-6-10 13:27:12

傻眼貓咪 发表于 2022-6-10 13:20
数组 a 多了一个 '/0' 空符在最后面
strlen() 计算字符不包括空符 '/0'

b数组是不是不合法啊,不应该也得有 '\0'吗?

傻眼貓咪 发表于 2022-6-10 13:31:43

我爱橙 发表于 2022-6-10 13:27
b数组是不是不合法啊,不应该也得有 '\0'吗?

如果只是存放字符的数组,当然是合法,但如果是想以字符串输出,就不合法了,后面必须多个 '\0'

b[] = { 'b', 'a', 'n', 'a', 'n', 'a', '\0' }
printf("%s", b}

傻眼貓咪 发表于 2022-6-10 13:33:26

我爱橙 发表于 2022-6-10 13:24
所以长度是不相同吗?

如果你说的长度是指数组里面的元素(不包括 '\0')当然是一样长度,所以 strlen() 才会一样

临时号 发表于 2022-6-10 13:42:20

本帖最后由 临时号 于 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语言的字符串

傻眼貓咪 发表于 2022-6-10 13:46:20

其实 C 语言没有字符串类型(它不懂辨认什么是字符串)所以在一些字符串函数里,如:printf() 想打印字符串,都是用指针,然后必须让编译器知道从指针位置到什么位置该打印(至于打印到什么位置?其实就是到 '\0' 位置)
你可以试试欺骗编译器
例子:
char b[] = {'A', 'B', 'C', '\0', 'D', 'E', 'F' };
printf("%s", b);

看看它会打印什么?

我爱橙 发表于 2022-6-10 13:51:14

傻眼貓咪 发表于 2022-6-10 13:46
其实 C 语言没有字符串类型(它不懂辨认什么是字符串)所以在一些字符串函数里,如:printf() 想打印字符串 ...

真的只到ABC{:9_228:}

傻眼貓咪 发表于 2022-6-10 13:55:28

我爱橙 发表于 2022-6-10 13:51
真的只到ABC

哈哈
页: [1]
查看完整版本: EX10.3 字符数组字节数 ?