问题标签 [memcmp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 为什么 memcmp 虽然相等但返回 -1
我正在使用memcmp()
相同结构的两个变量进行比较(结构中有联合)。变量在两个数组中,我正在运行一个循环,每次迭代我都会这样做memcmp(&arr1[i], &arr2[i], sizeof(arrtype))
。
调试时,我看到 memcmp 返回 -1,但查看两个变量及其值,我发现变量具有相等的值。这些数组在开始时用 memset 清零。
- 那么有人知道为什么
memcmp
返回-1而不是0吗? - 有没有更好的方法来做我需要的事情(比较两个内存块)?
代码:
c - memcmp(ptr1, ptr2, 0) 的返回值?
在阅读中:如何在不使用计数器的情况下检查数组的元素是否都相同?, @Skizz 使用了漂亮的解决方案:
所以如果 N 恰好是 1,我们得到
当比较长度为0时,返回值一定是0吗?
测试用例(Cygwin gcc 版本 4.8.1 windows 64 位)返回0
. 所以我知道在这个和其他一些编译器/平台上它是 0。
C11 草案规范紧随其后,但在这个问题上似乎很安静。也许规范的另一部分或某事说明了什么?
7.24.4.1 memcmp 函数
概要
说明
memcmp 函数将 s1 指向的对象的前 n 个字符与 s2 指向的对象的前 n 个字符进行比较。
返回
memcmp 函数返回一个大于、等于或小于零的整数,相应地,因为 s1 指向的对象大于、等于或小于 s2 指向的对象。
(假设 &string [1] 没有引用非法内存)
c - 将前 2 个字节(给定指针)与固定值进行比较的最高效方法?
给定一个指针,我想将前两个字节与固定值进行比较。
data
是一个空指针。有没有比这“更好”的方法:
也许我不必创建一个新的字符数组?谢谢!
c - 将数组内的十六进制值显示到标准输出,并将输入与这些十六进制值进行比较
这是我当前的代码:
(1) 我希望能够在标准输出中显示我的 char 数组 [] 中的确切值。我试过的东西不起作用:将数组显示为%c, %x, %d
.
(2) 从用户那里得到输入后,我希望能够将该输入与数组内的字符进行比较——认为 memcmp 将是可行的方法,但我如何遍历整个数组?我尝试这样做,if (memcmp(target, array[i], sizeof(target) == 0))
但由于该array[i]
部分而出现运行时错误,但如果我不添加该部分,它将如何通过整个数组将每个数组内存位置中存储的值与target
变量中存储的值进行比较? 我基本上想将每个数组位置内的字节与用户输入的字节进行比较。
c++ - memcmp 比较两个包含字符串的空指针
我有下一个问题。我使用int memcmp ( const void * ptr1, const void * ptr2, size_t num );
函数来比较两个包含整数的 void 指针。这对我很有用。
但是,如果我尝试对字符串使用相同的值,它总是显示第一个值小于第二个值。
所以compare
value 总是等于-1
。即使我正在制作firstValue = "a"; secondValue = "a";
. 请帮助某人。我已经尝试了我想到的一切来解决这个问题。先感谢您!
c - 使用 memcmp() 和指针算法比较 C 中的结构
我知道由于未初始化的填充,memcmp()
它不能用于比较尚未达到 0 的结构。memset()
但是,在我的程序中,我有一个结构,开始时有几种不同的类型,然后是几十种相同类型,直到结构结束。我的想法是手动比较前几种类型,然后memcmp()
在相同类型成员的剩余连续内存块上使用 a 。
我的问题是,C 标准对结构填充有什么保证?我可以在任何或所有编译器上可靠地实现这一点吗?C 标准是否允许在相同类型的成员之间插入结构填充?
我已经实现了我提出的解决方案,它似乎完全按照预期工作gcc
:
c++ - memcmp 奇怪地无法返回数组
我有如下所示的 C++ 代码:
第一个给我“平等”,第二个给我“不平等”。
为什么是这样?
c - 为什么 memcmp 比 for 循环检查快得多?
为什么memcmp(a, b, size)
比:
memcmp 是 CPU 指令还是什么?它一定很深,因为我使用memcmp
循环获得了巨大的加速。
c - 将 memcpy 或 memcmp 与范围一起使用
使用 memcpy 或 memcmp 时是否可以使用范围?
我希望能够将 (20) 键数据 [50-70] 与数组 [] 进行比较
c - 使用文件 i/o 读取字节长度
我正在尝试使用以下代码查找两个不同文件的字节长度,但是得到的字节长度为1,这显然是错误的。从长远来看,我正在尝试比较每个文件的内存位置并打印出它们的不同之处,如您所见。所以我没有得到任何结果,并做了printf
陈述来看看问题可能出在哪里。因此,看起来我的长度没有正确计算。
旁注可能有助于解决我的问题 - 我为 memcmp 找到了这个,但这是否意味着我不能使用!=
?:
if 返回值 if < 0 则表示 str1 小于 str2
if 返回值 if > 0 则表示 str2 小于 str1
if 返回值 if = 0 则表示 str1 等于 str2
请帮忙!