strlen获得char数组长度不正确的问题

zzllvlv 2019-01-07 01:41:21
我使用十六进制数据初始化一个字符串数组
```
char key[16] = { 0x5E, 0x74, 0x52, 0x61, 0x77, 0x4F, 0xC2, 0x1F, 0x6A, 0x5B, 0xBE, 0x6D, 0xEB, 0x2C, 0x94, 0x56};
```
但是其后使用strlen()的时候却不能获得正确的值,原本是16个,结果却多了很多。查找过后觉得是因为字符串结尾编码是0x00,但是编译器在字符串0x56的位置后没有找到0x00,就继续往下找,直到遇到0x00为止。但是我因该怎么用十六进制数来正确处理呢?后来发现其实只要将字符串多加一位,并在末尾添加0x00就可以让编译器正确识别了。
...全文
620 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
FightingBoom 2019-06-03
  • 打赏
  • 举报
回复
引用 5 楼 ooolinux 的回复:
[quote=引用 4 楼 Fighting_Boom 的回复:]
我的数组是这个样子的:char buf[MAXBUF] ={0X12,0X01,0X01,0X21,0X01,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x13};
在使用strlen(buf)的时候,判断的长度是6,也就是碰到第一个0X00就结束了,但是这个明显和我想计算的数组长度不符合,请问要怎么解决?

谢谢


sizeof(buf)/sizeof(char)[/quote]
已经解决了,谢谢你,我把数组里边的MAXBUF去掉,然后用sizeof(buf)计算就可以了,谢谢你
FightingBoom 2019-06-03
  • 打赏
  • 举报
回复
sizeof(buf)的话,就太多了,我数组空间给的1024,按照这样算出来也就是1024,不是实际的十六进制个数!十分感谢
ooolinux 2019-06-03
  • 打赏
  • 举报
回复
引用 4 楼 Fighting_Boom 的回复:
我的数组是这个样子的:char buf[MAXBUF] ={0X12,0X01,0X01,0X21,0X01,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x13};
在使用strlen(buf)的时候,判断的长度是6,也就是碰到第一个0X00就结束了,但是这个明显和我想计算的数组长度不符合,请问要怎么解决?

谢谢


sizeof(buf)/sizeof(char)
FightingBoom 2019-06-03
  • 打赏
  • 举报
回复
我的数组是这个样子的:char buf[MAXBUF] ={0X12,0X01,0X01,0X21,0X01,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x13}; 在使用strlen(buf)的时候,判断的长度是6,也就是碰到第一个0X00就结束了,但是这个明显和我想计算的数组长度不符合,请问要怎么解决? 谢谢
ooolinux 2019-01-07
  • 打赏
  • 举报
回复
按元素初始化是不会的。
ooolinux 2019-01-07
  • 打赏
  • 举报
回复
如果是初始化字符串的话,编译器会自动添加0,即'\0'字符,比如:
char s1[]="hello"; //"hello"位于栈内存或全局内存区
char *s2="world"; //"world"位于文字常量区,s2变量位于栈或者全局内存
这两种都会。
  • 打赏
  • 举报
回复
你这是按元素初始化数组,它不会自动加\0,按串初始化就可以了:
char key[] = "\x5E\x74\x52\x61\x77\x4F\xC2\x1F\x6A\x5B\xBE\x6D\xEB\x2C\x94\x56";

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧