请查看以下代码段。
unsigned char bInput[20];
unsigned char cInput[20];
从函数中,我在bInput
中得到二进制数据,并使用strlen(bInput)
确定其长度。
我将二进制的bInput
转换为ASCII并存储在cInput
中并打印其长度。但两者都不同。
我是编程新手。请指导其行为。
答案 0 :(得分:3)
函数strlen
返回内存中第一个字符的索引,值为0(AKA '\0'
),从传递给此函数的输入参数指示的内存地址开始。
如果您传递的内存地址为"其他内容"除了以零结尾的字符串(已在该内存地址上正确分配)之外,那么它很可能会导致内存访问冲突(AKA 分段错误 )。
答案 1 :(得分:1)
strlen()
计算每个字节,直到它达到NULL字符('\0'
,这意味着一个字节的值为零)。因此,如果您获得二进制和ascii字符的长度不同意味着您需要检查转换逻辑中的以下两点,
答案 2 :(得分:1)
两种情况的结果都不一样。 以下是一个示例场景: Null是有效的UTF-8,它不适用于C'字符串'。
char temp[8];
buf = "abcde\0f";
我们这里有一个长度为8的缓冲区,它包含以下char值:
97 98 99 100 101 0 102 0
这里,根据strlen设计,strlen(temp)等于5,但是,缓冲区的实际长度是8。