请至少告诉我,如果我是白痴或其他什么。不要只是投票。我是学生,需要了解这里发生了什么。谢谢!
所以我必须使用C重新创建memcmp()函数,我的函数按预期工作。它返回两个字符串中不匹配的第一个字符的差异。
我的功能:
int ft_memcmp(const void *s1, const void *s2, size_t n)
{
unsigned char *ptr1;
unsigned char *ptr2;
ptr1 = (unsigned char *)s1;
ptr2 = (unsigned char *)s2;
while (n && (*ptr1 == *ptr2))
{
ptr1++;
ptr2++;
n--;
}
if (n == 0)
return (0);
else
return (*ptr1 - *ptr2);
}
我的主要内容:
int main(void)
{
const char *s1 = "acc";
const char *s2 = "abc";
int res;
res = memcmp(s1, s2, 3);
printf("%i\n", res);
return (0);
}
所以这个main将返回256,但是如果你使用我的函数(ft_memcmp)你得到1.显然差异是1而不是256,但为什么原始函数返回256?相差2,我得到512 ...
仅供参考 - 我使用的是Linux Ubuntu 15.10。当我的朋友在他的Mac上测试memcmp时,他得到1而不是256.那真是太棒了!!?
答案 0 :(得分:2)
为什么memcmp()返回256表示差异为1?
首先,正如@where_is_tftp所回答的,$(document).ready(function () {
$('.numItems').keyup(function () {
var $row = $(this).closest('tr');
var unitPrice = parseFloat($row.find('.priceToCalc').text());
$row.find('.totalAmt').val(this.value * unitPrice);
});
});
唯一需要返回的是memcmp()
,一些正数和一些比较中的负数。
256而不是1 - 当然是因为优化。
好0
利用比memcmp()
更宽的类型进行比较。
示例:在考虑对齐和总长度后,第一次比较(使用32位char
)看到差异,而不是在1的位置(位0),而是256&#39 ; s postilion(第8位)。由于返回256与1一样有效,因此无需简化。请记住unsigned
是特定于平台的,它的实现可以完成C代码无法做到的事情 - 比如在数组外安全访问。其他细节在此省略。
memcmp()
答案 1 :(得分:1)
我无法在memcmp旁边找到关于非零返回值的确切值的声明(在手册页或Open Group页面上):
非零返回值的符号应由符号确定 第一对字节的值之间的差异(两者都有) 解释为类型unsigned char)在对象中不同 比较。
返回值
memcmp()函数应返回大于的整数,等于, 或小于0 ,如果s1指向的对象大于,等于 分别来自或小于s2指向的对象。
这里没有说这是字符之间的小数差异。