找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3291|回复: 28
收起左侧

关于C语言中的字符串数组中的问题

  [复制链接]
ID:329253 发表于 2018-5-30 15:26 | 显示全部楼层 |阅读模式
想问问大家就是比如
定义一个字符串数组例如:
char a[]="abcde"
想问问这里 具体有几个元素啊?不是应该有六个吗?还有一个\0
可是打印的时候为什么不行呢。
打印%d的时候也并不出现这个空字符对应的ASCII值0

回复

使用道具 举报

ID:223470 发表于 2018-5-30 15:41 | 显示全部楼层
这样写的话是6个元素,如果你写char a[5]=“abcde”就是五个元素,你可以使用sizeof函数查看这个数组大小。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:321742 发表于 2018-5-30 15:41 | 显示全部楼层
        int i;         char a[]="abcde";         for(i=0;i<sizeof(a);i++)                 printf("%d\t",a[i]);

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:341446 发表于 2018-5-30 15:48 | 显示全部楼层
就6个元素啊,\0它所的意义是“字符串结束符”,因此当把一个字符串存入一个数组时,也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:341446 发表于 2018-5-30 15:49 | 显示全部楼层
字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:321742 发表于 2018-5-30 15:49 | 显示全部楼层
运行下试试吧。
int i;
char a[]="abcde";
for(i=0;i<sizeof(a);i++)
    printf("%d\t",a[i]);

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:329253 发表于 2018-5-30 16:16 来自手机 | 显示全部楼层
timelessxp 发表于 2018-5-30 15:41
这样写的话是6个元素,如果你写char a[5]=“abcde”就是五个元素,你可以使用sizeof函数查看这个数组大小。

试过了,确实是六个,但是为什么我用printf打印数组中的字符时,只会出现五个呀?
回复

使用道具 举报

ID:329253 发表于 2018-5-30 16:17 来自手机 | 显示全部楼层
wklhwkl 发表于 2018-5-30 15:41
int i;         char a[]="abcde";         for(i=0;i

是六个元素,但是为什么用printf打印数组中的元素时只能打印出来五个呀?用%d形式打印的,怎么不出现这个0呢?
回复

使用道具 举报

ID:329253 发表于 2018-5-30 16:17 来自手机 | 显示全部楼层
ynit 发表于 2018-5-30 15:48
就6个元素啊,\0它所的意义是“字符串结束符”,因此当把一个字符串存入一个数组时,也把结束符'\0'存入数 ...

是六个元素,但是为什么用printf打印数组中的元素时只能打印出来五个呀?用%d形式打印的,怎么不出现这个0呢?
回复

使用道具 举报

ID:329253 发表于 2018-5-30 16:18 来自手机 | 显示全部楼层
wklhwkl 发表于 2018-5-30 15:49
运行下试试吧。
int i;
char a[]="abcde";

是六个元素,但是为什么用printf打印数组中的元素时只能打印出来五个呀?用%d形式打印的,怎么不出现这个0呢?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:223470 发表于 2018-5-30 20:05 | 显示全部楼层
\0是说明这个数组结束了,和你打印\r\n一个道理,就是描述符而已。
回复

使用道具 举报

ID:321742 发表于 2018-5-31 11:52 | 显示全部楼层
134849694164151 发表于 2018-5-30 16:18
是六个元素,但是为什么用printf打印数组中的元素时只能打印出来五个呀?用%d形式打印的,怎么不出现这个 ...

你是说 printf("%s",a)  这样输出吗? 如果是这样的话,  %s是以'\0'结束的。  比如有一个字符串是 "123\0abcd"  你这样输出也是只打印出123。
回复

使用道具 举报

ID:342182 发表于 2018-5-31 14:54 | 显示全部楼层
\0是结束标识,在存储上要占用一个字节,但是操作的时候到它就停止了,因此只能看到5个
回复

使用道具 举报

ID:342236 发表于 2018-5-31 15:45 | 显示全部楼层
\0是结束标识是看不到的。

int i;
char a[]="abcde";
for(i=0;i<sizeof(a);i++)
     printf("%d\t",a[i]);
回复

使用道具 举报

ID:343956 发表于 2018-6-3 16:28 | 显示全部楼层
只有一个元素,\0仅表示一个字符串结束的标志,是不会打印出来的。
回复

使用道具 举报

ID:344758 发表于 2018-6-4 16:33 | 显示全部楼层
应该是有6个
回复

使用道具 举报

ID:343894 发表于 2018-6-4 22:53 | 显示全部楼层
\0打印显示不出来,但是占1个字节内存
回复

使用道具 举报

ID:345991 发表于 2018-6-6 11:11 | 显示全部楼层
\0是字符串结束符,你用sizeof函数时可看出占用一个字节,但在系统终端默认打印时不予显示。也可以用strlen函数检验
回复

使用道具 举报

ID:346107 发表于 2018-6-6 13:46 | 显示全部楼层
占用6个内存空间,应该是5个元素的,\0是字符串结束符
回复

使用道具 举报

ID:346273 发表于 2018-6-6 16:55 | 显示全部楼层
结束标识如果能看到那所有打印内容都会有\0了,很不方便
回复

使用道具 举报

ID:346355 发表于 2018-6-6 18:29 | 显示全部楼层
\0是标识符,遇到它就结束了所以不打印了,我是这么理解的
回复

使用道具 举报

ID:346429 发表于 2018-6-6 20:20 | 显示全部楼层
\0就是不会在printf出现啊,它只是一个结束符
回复

使用道具 举报

ID:346546 发表于 2018-6-6 22:44 | 显示全部楼层
第六个不显示只是标志着结束
回复

使用道具 举报

ID:346767 发表于 2018-6-7 10:53 | 显示全部楼层
printf打印数组中的字符时,只会出现五个,第6个是\0,显示不出来什么
回复

使用道具 举报

ID:348456 发表于 2018-6-9 22:02 | 显示全部楼层
字符串数组后面没有\0,string后面有\0
回复

使用道具 举报

ID:348525 发表于 2018-6-9 23:51 | 显示全部楼层
6个。。。。。。。。。。。。
回复

使用道具 举报

ID:348550 发表于 2018-6-10 02:10 | 显示全部楼层
\0是结束符吧
回复

使用道具 举报

ID:348657 发表于 2018-6-10 11:35 | 显示全部楼层
5个,\0只是一个表示符,只要你录入字符串他会自动给你加上\0,他占用空间,但是不算在元素中
回复

使用道具 举报

ID:390775 发表于 2018-9-4 17:15 | 显示全部楼层
应该是  6个 你可以用 sizeof看下 它占用了多少个字节  如果是用printf(“%d\n”,a);打印的是数组 首元素地址 不会打印 数组元素。看我写的代码,和运算结果。
捕获.PNG
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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