【问题标题】:Comparing non null-terminated char arrays比较非空终止字符数组
【发布时间】:2013-08-28 13:08:21
【问题描述】:

我有一个已知大小的压缩unsigned char 数组。由于压缩考虑,我不会在最后存储空终止符。我想将它与另一个相同格式的数组进行比较。什么 这样做是最好的方法吗?

我想将比较后的数组复制到一个新数组中,添加空终止符,然后使用strcmp() 比较它们。

有更好的建议吗?

【问题讨论】:

  • 或者您可以简单地遍历数组并比较它们的元素。
  • 标准内存比较函数调用memcmp

标签: c arrays compression unsigned-char


【解决方案1】:

两年后,但是……

我相信“memcmp”是您想要使用的函数,因为如果“strncmp”在压缩字符串中发现零字节,它可能会停止。

【讨论】:

    【解决方案2】:

    你可以使用string.h中的strncmp()函数

    strncmp(str1, str2, size_of_your_string); 
    

    您可以在此处手动指定字符串的大小(或要比较的字符数)。 strlen() 可能无法获取字符串的长度,因为您的字符串不是以 NUL 字符结尾的。

    更新:

    查看unsigned char数组的比较代码

    #include<stdio.h>
    #include<string.h>
    main()
    {
    
    unsigned char str[]="gangadhar", str1[]="ganga";
    if(!strncmp(str,str1,5))
    printf("first five charcters of str and str1 are same\n");
    else
    printf("Not same\n");
    
    }
    

    【讨论】:

    • strncmp 是否也适用于无符号字符字符串? @Gangadher
    • @DavidTzoor 是的,确实如此。
    • @DavidTzoor 是的,它可以看到添加到答案中的简单示例。
    • 实际上,它只适用于您的情况——压缩二进制数据——因为这通常不包含零字节。任何零字节都会提前终止 strncmp 操作 -- strncmp definition.
    • 对于 c++,cppreference.com 说:“如果 lhs 或 rhs 不是指向以空字符结尾的字符串的指针,则 [of strncmp(lhs, rhs, count)] 的行为是未定义的。”但是,它看起来对 C 来说是安全的。
    【解决方案3】:

    既然你知道数组的大小,你可以使用strncmp():

    int strncmp (char *string1, char *string2, int n)
    

    n 是要比较的字符数。

    迪茨:http://www.tutorialspoint.com/ansi_c/c_strncmp.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多