如何对两个未知字节大小的指针进行字典比较, 假设两个数组大小相等, 例如,根据比较实现以下函数返回-1或0或1,并将每个字节转换为ascii
compare(const void *p1, const void *p2, int size)
编辑:我添加了另一个带有要比较的字节大小的参数,我如何将每个字节转换为char并在它们之间进行比较?
答案 0 :(得分:2)
您可能正在寻找strcmp(3)
功能。
<强>更新强>
如果您的数组不是ASCII字符串并且可能在任何位置包含0x00
字节而实际上没有任何意义,那么您将需要Oli指出的长度,因此您可以使用{{3}功能:
int memcmp(const void *s1, const void *s2, size_t n);
更新#2
好的,现在我们已经确定你也想要不同的字节,你需要自己的功能。像这样(未经测试):
size_t cmp(const unsigned char *c1, const unsigned char *c2, ssize_t n) {
ssize_t i;
for (i=0; i<n; i++) {
if (c1[i] != c2[i])
return i;
}
-1;
}
这将让您找到不同字节的字节值。如果没有差异,请注意-1
返回。这限制了你比较大小完全适合ssize_t
的对象,它小于size_t
类型 - 但是因为你要比较其中两个,我认为每个对象都有一半的进程地址最重要的是空间。
答案 1 :(得分:0)
你需要一些了解尺寸的方法。明确地(例如,在数据中使用size
参数或字段),或隐式地(例如使用空终止符)。