如何在没有strlen()或搜索NULL终止符的情况下在C中查找字符串长度

时间:2011-10-24 06:56:10

标签: c binary-data

我需要计算使用霍夫曼压缩编码的字符串的长度。它可能有'\ 0'字符,因此strlen()或任何其他搜索NULL终止符的函数都不起作用。如何确定这样一个字符串的长度?

4 个答案:

答案 0 :(得分:4)

这是不可能的。去一个字段并走直到结束。没有什么不同于该领域的其他部分来标记结束。

  • 计算加密前的长度(加密通常不应更改)
  • 使用可能未出现在字符串中的字符(如果有的话)作为终结符

修改

OP提到他正在使用Huffman进行压缩。

在这种情况下,您应该让压缩函数返回压缩字符串的大小。

答案 1 :(得分:3)

您可以使用带有int的结构长度和用于存储字符串的char指针。使用malloc分配内存和memcpy来操作字符串。

答案 2 :(得分:2)

重要的问题是你用什么来加密?如果此加密库不会更改字符串的长度,您应该知道该字符串之前的大小,因为您之前可以strlen()

如果库更改了长度,则必须向其传递缓冲区并告知库的大小。如果调用成功,那么库必须返回(即:缓冲区足够大)以及目标有多大。

注意:如果使用块密码,则只允许输入一定长度(不短或长)的块,结果是固定大小的缓冲区 - 在openssl的情况下,有一个宏{{1表示块长度和结果的长度。

代码共享将在这里受到赞赏。

答案 3 :(得分:1)

在C中,字符串是以二进制0结尾的字符数组。如果在字符串中散布了0,则它不再是字符串。

在加密过程中,您需要存储字符串的长度,该字符串现在不是字符串而是二进制数据。您还可以定义一个终止加密字符串的神奇字符序列,但是您必须确保神奇序列永远不会嵌入加密数据中。