gpt4 book ai didi

c - strlen不能返回正确的长度

转载 作者:行者123 更新时间:2023-12-04 11:16:40 32 4
gpt4 key购买 nike

我目前正在使用strlen方法来计算此字符串的长度:

56 69 56 4F 74 65 63 68 32 00 2C 00 00 27 6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 04 10 10 87 01 01

主要问题是遇到00时总是停止,我认为这与'\0'混淆了!因此,我想知道是否可以替代此方法,或者您有什么建议可以解决此问题。

附注:我不确定问题是否重复,我搜索了相同的问题,但找不到满意的答案!

编辑:

我的代码:

unsigned char Response[269]={0x00};
unsigned char Response_PPSE[269];


for(i=0;i<=strlen(Response);i++)
sprintf(Response_PPSE+(2*i),"%02X",Response[i]);


strlen只计算此字节的长度:
56 69 56 4F 74 65 63 68 32 00

最佳答案

到目前为止,我看到的其他答案都围绕着这里的实际问题展开。这是您需要了解要处理的字符串类型。

按照历史惯例,C将字符串表示为以空终止的字符数组。这就是strlen期望的字符串。但是您的“字符串”包含空字节。因此,它不是一个以空字符结尾的字符串,strlen不会执行您想要的操作。

更重要的是,strlen极其危险,切勿在现代代码中使用。很容易造成安全漏洞,而且很奇怪,如果您的程序使用strlen检查通过网络接收的响应,则很有可能利用该程序来实现拒绝或服务甚至远程执行代码。

如果指定了正确的大小限制,则更安全的选择是strnlen。正确的解决方案很难更加精确,因为在您的示例中,正确答案始终为269,因此实际上没有可测量的变长字符串。

关于c - strlen不能返回正确的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29517418/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com