比较非空结尾字符数组

8
我有一个已知大小的压缩unsigned char数组。由于压缩考虑,我没有在末尾存储空终止符。我想将它与另一个相同格式的数组进行比较。最好的方法是什么?
我的想法是将压缩数组复制到一个新数组中,在末尾加上空终止符,然后使用strcmp()进行比较。
是否有更好的建议?

1
或者你可以简单地循环遍历数组并比较它们的元素。 - MD Sayem Ahmed
1
标准的内存比较函数被称为memcmp - Jongware
3个回答

9

你可以使用来自string.hstrncmp()函数。

strncmp(str1, str2, size_of_your_string); 

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

更新:

请参见用于比较无符号字符数组的代码。

#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");

}

1
strncmp函数也适用于无符号字符字符串吗?@Gangadher - David Tzoor
1
@DavidTzoor 是的,它确实有。 - verbose
@DavidTzoor 是的,它有效,请查看答案中添加的简单示例。 - Gangadhar
2
实际上,它只适用于您的情况——压缩二进制数据——因为这通常不会包含零字节。任何零字节都会提前终止strncmp操作——strncmp定义 - Jongware
对于C ++,cppreference.com表示:“如果lhs或rhs不是指向以null结尾的字符串的指针,则[strncmp(lhs,rhs,count)]的行为未定义。”但是,看起来它在C中是安全的。 - Vaelus

3

两年后,但是...

我认为你想要使用的函数是“memcmp”,因为“strncmp”可能会在压缩字符串内找到零字节时停止。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接