鱼C论坛

 找回密码
 立即注册
查看: 3434|回复: 9

EX10.3 字符数组字节数 ?

[复制链接]
发表于 2022-6-10 13:03:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 我爱橙 于 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'计入长度;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-10 13:20:07 From FishC Mobile | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-6-10 13:35 编辑

数组 a 多了一个 ' \0' 空符在最后面
strlen() 计算字符不包括空符 ' \0'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-10 13:24:23 | 显示全部楼层
傻眼貓咪 发表于 2022-6-10 13:20
数组 a 多了一个 '/0' 空符在最后面
strlen() 计算字符不包括空符 '/0'

所以长度是不相同吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-10 13:27:12 | 显示全部楼层
傻眼貓咪 发表于 2022-6-10 13:20
数组 a 多了一个 '/0' 空符在最后面
strlen() 计算字符不包括空符 '/0'

b数组是不是不合法啊,不应该也得有 '\0'吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-10 13:31:43 From FishC Mobile | 显示全部楼层
我爱橙 发表于 2022-6-10 13:27
b数组是不是不合法啊,不应该也得有 '\0'吗?

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

b[] = { 'b', 'a', 'n', 'a', 'n', 'a', '\0' }
printf("%s", b}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-10 13:33:26 From FishC Mobile | 显示全部楼层
我爱橙 发表于 2022-6-10 13:24
所以长度是不相同吗?

如果你说的长度是指数组里面的元素(不包括 '\0')当然是一样长度,所以 strlen() 才会一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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语言的字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

看看它会打印什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

真的只到ABC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-10 13:55:28 From FishC Mobile | 显示全部楼层
我爱橙 发表于 2022-6-10 13:51
真的只到ABC

哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 10:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表