野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13681|回复: 6

字符数组问题,求助大家

[复制链接]
发表于 2018-1-13 10:22:27 | 显示全部楼层 |阅读模式
本帖最后由 美丽的时光机器 于 2018-1-13 11:47 编辑

1.问题描述:
我先定义了一个字符数组,并初始化,如下:
char SendBuff[] = "ABCDEFGH";                                      

然后我用strlen和sizeof分别计算它们在内存占用的字节大小:
len = strlen(SendBuff);
len_1 = sizeof(SendBuff);
然后在通过printf在电脑上位机上显示,结果是len = 16, len_1 = 8,这个结果我很疑惑,我觉得len应该等于8,sizeof等于9
然后我去看了这两个变量在内存中的值为十六进制len = 0x00000010和len_1 = 0x00000008,确实是对应16和8,为什么呢?
后来我将char SendBuff[] = "ABCDEFGH";      改为char SendBuff[] = "12345678";    这两个变量在内存中的值为十六进制len = 0x00000008和len_1 = 0x00000008,结果就正常了,什么原因呢?
2.截图如下:
问题1.jpg
问题2.jpg
问题3.jpg
问题4.jpg
回复

使用道具 举报

发表于 2018-1-13 17:02:35 | 显示全部楼层

回帖奖励 +2 火花

strlen 计算字符串的长度,以\0'为字符串结束标记,不把\0计入字符串的长度
sizeof 计算的则是分配的数组SendBuff 所占的内存空间的大小,如果有\0,也是计算在内的

char SendBuff[] = "ABCDEFGH";
len = strlen(SendBuff);           这个计算的是字符串的长度,“ABCDEFGH” 中总共有 A B C D E F G H \0 9个字符,strlen 计算的字符是不算\0在内的,所以应该等于8,sizeof计算的是内存的大小,要把\0计算在内,应该是等于9
len_1 = sizeof(SendBuff);

同理,char SendBuff[] = "12345678";  也应该是一样的结果。
回复 支持 反对

使用道具 举报

发表于 2018-1-13 17:04:24 | 显示全部楼层
更加 具体的你可以看下这个 博客 里面的

http://blog.csdn.net/21aspnet/article/details/1539951
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-14 12:58:12 | 显示全部楼层
fire 发表于 2018-1-13 17:02
strlen 计算字符串的长度,以\0'为字符串结束标记,不把\0计入字符串的长度
sizeof 计算的则是分配的数组S ...

是的  两者的区别我能分得清,现在就是不明白为什么是16和8,还要深入分析一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-14 12:58:55 | 显示全部楼层
fire 发表于 2018-1-13 17:04
更加 具体的你可以看下这个 博客 里面的

http://blog.csdn.net/21aspnet/article/details/1539951

三克油。。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-14 14:02:54 | 显示全部楼层
fire 发表于 2018-1-13 17:02
strlen 计算字符串的长度,以\0'为字符串结束标记,不把\0计入字符串的长度
sizeof 计算的则是分配的数组S ...

回去试验了一下,char SendBuff[] = "ABCDEFGH"; 这个我是在工程里面其他的C文件定义的,然后再用对应头文件声明为外部,在主函数里面计算,这样做计算出来就是16和8。但是当我把它定义在main.c文件的时候计算出来就是8和9了,结果是正确的。现在问题是为什么我定义在其他的C文件就会不正确呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-14 14:03:59 | 显示全部楼层
fire 发表于 2018-1-13 17:02
strlen 计算字符串的长度,以\0'为字符串结束标记,不把\0计入字符串的长度
sizeof 计算的则是分配的数组S ...

回去试验了一下,char SendBuff[] = "ABCDEFGH"; 这个我是在工程里面其他的C文件定义的,然后再用对应头文件声明为外部,在主函数里面计算,这样做计算出来就是16和8。但是当我把它定义在main.c文件的时候计算出来就是8和9了,结果是正确的。现在问题是为什么我定义在其他的C文件就会不正确呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-18 02:03 , Processed in 0.036463 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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