鱼C论坛

 找回密码
 立即注册
查看: 3195|回复: 11

字符串占多少字节的问题

[复制链接]
发表于 2020-12-18 00:25:04 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
求助大佬
一个字符串是怎么看他占多少个字节的,英文和中文字符分别是占多少,还有就是字符串数组怎么看多少字节
比如 char [] a={"aaa","bbbb"}
还有就是string [] b={"aaa","bbbb"}
这两个不同类型的,对应占的字节应该也不一样吧,一个是char数组,一个是string数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-18 10:19:00 From FishC Mobile | 显示全部楼层
各位大佬,麻烦解答一下呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-18 10:51:16 | 显示全部楼层
本帖最后由 jackz007 于 2020-12-18 11:01 编辑

        确定字符串占用多少字节用 strlen() 就可以,但必须是单个字符串,如果参数是包含 1 个以上字符串的字符串数组,那么返回的是第一个字符串的长度(字节),这个数值是随着字符串内容的改变而动态变化的。
        如果想知道字符数组 a 总共占用了多少字节,用 sizeof(a),这个数值是在程序编译的时候,根据当时变量定义所确定的,只和字符串数组的原始内容有关,如果字符串在程序运行中改变,sizeof(a) 的数值不会改变。也就是说,sizeof(a) 不是字符串占用的字节数。而是字符数组 a 中最大能够容纳的字符数,这个数值在程序编译过后就固定不变了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-18 11:18:33 From FishC Mobile | 显示全部楼层
jackz007 发表于 2020-12-18 10:51
确定字符串占用多少字节用 strlen() 就可以,但必须是单个字符串,如果参数是包含 1 个以上字符串 ...

我还不是很懂,大佬帮我看看这题吧,怎么看他占的字节大小
mmexport1608261444936.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-18 14:53:34 | 显示全部楼层
字符串默认是以\0结尾的
所以
"public"  --->7
"static"  --->7
"void"   --->5
"main(String[]args)"  --->19
一共38
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-18 14:54:40 | 显示全部楼层
初学。解释的可能不是那么清晰,可以参考
https://www.cnblogs.com/x_wukong/p/5916370.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-18 18:44:50 From FishC Mobile | 显示全部楼层
笨鸟学飞 发表于 2020-12-18 14:53
字符串默认是以\0结尾的
所以
"public"  --->7

char数字存字符串我知道是这样呀,这个是string,答案是66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-18 18:48:09 From FishC Mobile | 显示全部楼层
笨鸟学飞 发表于 2020-12-18 14:53
字符串默认是以\0结尾的
所以
"public"  --->7

这是我一个朋友问我的,我也答不出来,反正他说答案是66。这string数组存的是引用数据类型吧,不是char数组这样的基本数据类型吧,所以我就不是很清楚每个对应多少个字节了,这个题好像是java的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-18 19:22:45 | 显示全部楼层
aaa,你看到有三个a,这是英文,它占三个字节,然后由于是字符串,还要占一个字节来表示它是字符串,所以它占四个字符。而汉字一般占两个字节
还有你的两个数组确实不一样,所以里面的内容肯定不一样,所以你肯定有一个是错的

char[]数组就是错的,它只能表示一个字符串。你要它表示两个字符串,和string一样,那么,得char[][].
这两个方括号好像有一个不能为空,必须要给值,这个我记不太清楚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-18 20:58:29 From FishC Mobile | 显示全部楼层
405794672 发表于 2020-12-18 19:22
aaa,你看到有三个a,这是英文,它占三个字节,然后由于是字符串,还要占一个字节来表示它是字符串,所以它 ...

哦,对char数组有要用二维的才能存多个字符串,忘了。char的东西我基本都知道,其实我是想知道string的内存是怎么算的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-19 10:42:03 | 显示全部楼层
c语言中可以在函数库#include <string.h>中调用strlen();函数  测量一个字符串的真实长度(不包括字符串末尾的\0).
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-19 19:11:17 | 显示全部楼层
wht666 发表于 2020-12-18 20:58
哦,对char数组有要用二维的才能存多个字符串,忘了。char的东西我基本都知道,其实我是想知道string的内 ...

我不是太清楚。这样跟你说吧,如果用双引号,那么,它代表的不是具体的值,而是一个地址。引用的时候,传过去的是一个地址,里面的字符就在这个地址里存着,所以字符串才可以随意长度。如果这是char[][]数组,我可以很肯定地说"XXX","XXXXXXXX",一共有两个地址,所以它占32位。两个16位嘛。至于string数组有什么特殊的制式我就不知道了,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 14:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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