VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 962|回复: 10

[已解决]字符串所占字节数问题

[复制链接]
18_avatar_middle
最佳答案
0 
donate_vip 发表于 2021-4-17 11:37:53 | 显示全部楼层 |阅读模式
char szStr[] = "abc";//Ansi
size_t byteNumberAnsiA = sizeof(szStr);
char* pszStr = "abc";
size_t byteNumberAnsiP = strlen(pszStr)*sizeof(char);

byteNumberAnsiA = 4
byteNumberAnsiP = 3

是因为数组会在字符串末尾自动加 /0 吗??
感谢!!
最佳答案
31_avatar_small
2021-4-17 22:38:46
1、字符串末尾永远会有\0,
2、指针虽然看似数组,甚至有时用法都一样,但它们永远不一样,不是一个东西!
3、指针存的是地址,不是你说的字符串!
strlen(pszStr) 返回的是字符串数量,不包含末尾的\0,sizeof(char)在VS编译器上得到的永远是1。
strlen(pszStr)*sizeof(char);这条语句你就没理解!
11.png




上一篇:vs2019 picture 控件 自定义继承Static 类里定义 单机事件无效
下一篇:网络编程高级班
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-4-17 22:38:46 | 显示全部楼层    本楼为最佳答案   
bestAnswer
1、字符串末尾永远会有\0,
2、指针虽然看似数组,甚至有时用法都一样,但它们永远不一样,不是一个东西!
3、指针存的是地址,不是你说的字符串!
strlen(pszStr) 返回的是字符串数量,不包含末尾的\0,sizeof(char)在VS编译器上得到的永远是1。
strlen(pszStr)*sizeof(char);这条语句你就没理解!
18_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-4-17 13:15:55 | 显示全部楼层
数组的sizeof值等于数组所占用的内存字节数(有效长度+末尾的/0)。
求byteNumberAnsiP时,strlength返回的是有效长度,所以真实值应该是
(strlen(pszStr)+1)*sizeof(char)??
就是用指针存储字符串时,到底这个字符串末尾有没有加 /0 ??


18_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-4-20 09:48:32 | 显示全部楼层
cpp2019 发表于 2021-4-17 22:38
1、字符串末尾永远会有\0,
2、指针虽然看似数组,甚至有时用法都一样,但它们永远不一样,不是一个东西! ...

好的,感谢感谢!!
char* pszStr = "abc";
pszStr在初始化时候会根据初始化的值("abc")分配内存,然后字符串的末尾永远都有\0,那分配内存的时候有没有考虑到这个\0呢。char类型占1个字节,我纠结的是初始化的时候是给指针分配了3个字节还是4个字节??
字符串末尾的\0是不是不论什么方式存储,都会占字节,比如Ansi就1个字节、Unicode就占2个字节??
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-4-20 19:16:05 | 显示全部楼层
Alice_Li 发表于 2021-4-20 09:48
好的,感谢感谢!!
char* pszStr = "abc";
pszStr在初始化时候会根据初始化的值("abc")分配内存, ...


再说一遍,指针存储的是地址,
指针你都没搞清楚是干什么的,就不要纠结这些接近底层的东西,你只管用就行了,取字符串数量用strlen,取字节数用sizeof就完了!

18_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-4-21 08:16:27 | 显示全部楼层
cpp2019 发表于 2021-4-20 19:16
再说一遍,指针存储的是地址,
指针你都没搞清楚是干什么的,就不要纠结这些接近底层的东西,你只管用 ...

膜拜~~
我知道指针存储的是地址。我就是想了解一下,你没有正面回答我的问题啊小姐姐~~
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-4-21 12:51:12 | 显示全部楼层
本帖最后由 cpp2019 于 2021-4-21 12:56 编辑
Alice_Li 发表于 2021-4-21 08:16
膜拜~~
我知道指针存储的是地址。我就是想了解一下,你没有正面回答我的问题啊小姐姐~~


什么叫没有正面回答?你想知道字节数用sizeof不就行了么!管他unicode还是其它编码,切换一下字符集调试一下不就一目了然,非得一点一滴都说透?不开窍啊!
叫哥!哥哥我只是喜欢这个小姐姐!
58_avatar_middle
最佳答案
58 
online_vip 发表于 2021-4-22 06:07:48 | 显示全部楼层
Alice_Li 发表于 2021-4-21 08:16
膜拜~~
我知道指针存储的是地址。我就是想了解一下,你没有正面回答我的问题啊小姐姐~~

建议初学时,不用抛根问底,初学时由于知识储备不足,表达和理解效率很低,带着问题,带着好奇心去学习,效果会更好,学到后面,自然而然就懂了。
18_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-4-22 10:25:53 | 显示全部楼层
cpp2019 发表于 2021-4-21 12:51
什么叫没有正面回答?你想知道字节数用sizeof不就行了么!管他unicode还是其它编码,切换一下字符集调 ...

小哥哥还是没有正面回答我的问题字符串所占字节数问题
我的问题很简单啊,3还是4~~
但我感觉应该是4,strlen(pszStr)只返回了有效长度,\0虽然不是有效长度但也是要占空间的,我就是想确认一下......
18_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-4-22 10:29:54 | 显示全部楼层
thzzl 发表于 2021-4-22 06:07
建议初学时,不用抛根问底,初学时由于知识储备不足,表达和理解效率很低,带着问题,带着好奇心去学习, ...

谢谢小姐姐or小哥哥!
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-4-22 20:22:56 | 显示全部楼层
Alice_Li 发表于 2021-4-22 10:25
小哥哥还是没有正面回答我的问题
我的问题很简单啊,3还是4~~
但我感觉应该是4,strlen(pszSt ...

2、5、7楼连起来好好看看,非常确定的答案,你还要靠感觉?我跟你说,回答你的问题太费劲了,我可以是一杯茶,一杯咖啡,一行代码写一天的人!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-6-10 04:39

Powered by CcTry.CoM

© 2009-2021 cctry.com

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