strlen是否为二进制和ascii数据返回相同的值

时间:2014-07-06 13:14:19

标签: c string char ascii strlen

请查看以下代码段。

unsigned char bInput[20];
unsigned char cInput[20];

从函数中,我在bInput中得到二进制数据,并使用strlen(bInput)确定其长度。 我将二进制的bInput转换为ASCII并存储在cInput中并打印其长度。但两者都不同。

我是编程新手。请指导其行为。

3 个答案:

答案 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。