问题标签 [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.

0 投票
3 回答
2780 浏览

c - 为什么 memcmp 虽然相等但返回 -1

我正在使用memcmp()相同结构的两个变量进行比较(结构中有联合)。变量在两个数组中,我正在运行一个循环,每次迭代我都会这样做memcmp(&arr1[i], &arr2[i], sizeof(arrtype))

调试时,我看到 memcmp 返回 -1,但查看两个变量及其值,我发现变量具有相等的值。这些数组在开始时用 memset 清零。

  1. 那么有人知道为什么memcmp返回-1而不是0吗?
  2. 有没有更好的方法来做我需要的事情(比较两个内存块)?

代码:

0 投票
1 回答
5593 浏览

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] 没有引用非法内存)

0 投票
2 回答
455 浏览

c - 将前 2 个字节(给定指针)与固定值进行比较的最高效方法?

给定一个指针,我想将前两个字节与固定值进行比较。 data是一个空指针。有没有比这“更好”的方法:

也许我不必创建一个新的字符数组?谢谢!

0 投票
2 回答
155 浏览

c - 将数组内的十六进制值显示到标准输出,并将输入与这些十六进制值进行比较

这是我当前的代码:

(1) 我希望能够在标准输出中显示我的 char 数组 [] 中的确切值。我试过的东西不起作用:将数组显示为%c, %x, %d.
(2) 从用户那里得到输入后,我希望能够将该输入与数组内的字符进行比较——认为 memcmp 将是可行的方法,但我如何遍历整个数组?我尝试这样做,if (memcmp(target, array[i], sizeof(target) == 0))但由于该array[i]部分而出现运行时错误,但如果我不添加该部分,它将如何通过整个数组将每个数组内存位置中存储的值与target变量中存储的值进行比较? 我基本上想将每个数组位置内的字节与用户输入的字节进行比较。

0 投票
2 回答
2556 浏览

c++ - memcmp 比较两个包含字符串的空指针

我有下一个问题。我使用int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 函数来比较两个包含整数的 void 指针。这对我很有用。

但是,如果我尝试对字符串使用相同的值,它总是显示第一个值小于第二个值。

所以comparevalue 总是等于-1。即使我正在制作firstValue = "a"; secondValue = "a";. 请帮助某人。我已经尝试了我想到的一切来解决这个问题。先感谢您!

0 投票
2 回答
2877 浏览

c - 使用 memcmp() 和指针算法比较 C 中的结构

我知道由于未初始化的填充,memcmp()它不能用于比较尚未达到 0 的结构。memset()但是,在我的程序中,我有一个结构,开始时有几种不同的类型,然后是几十种相同类型,直到结构结束。我的想法是手动比较前几种类型,然后memcmp()在相同类型成员的剩余连续内存块上使用 a 。

我的问题是,C 标准对结构填充有什么保证?我可以在任何或所有编译器上可靠地实现这一点吗?C 标准是否允许在相同类型的成员之间插入结构填充?

我已经实现了我提出的解决方案,它似乎完全按照预期工作gcc

0 投票
1 回答
273 浏览

c++ - memcmp 奇怪地无法返回数组

我有如下所示的 C++ 代码:

第一个给我“平等”,第二个给我“不平等”。

为什么是这样?

0 投票
3 回答
18012 浏览

c - 为什么 memcmp 比 for 循环检查快得多?

为什么memcmp(a, b, size)比:

memcmp 是 CPU 指令还是什么?它一定很深,因为我使用memcmp循环获得了巨大的加速。

0 投票
1 回答
661 浏览

c - 将 memcpy 或 memcmp 与范围一起使用

使用 memcpy 或 memcmp 时是否可以使用范围?

我希望能够将 (20) 键数据 [50-70] 与数组 [] 进行比较

0 投票
3 回答
203 浏览

c - 使用文件 i/o 读取字节长度

我正在尝试使用以下代码查找两个不同文件的字节长度,但是得到的字节长度为1,这显然是错误的。从长远来看,我正在尝试比较每个文件的内存位置并打印出它们的不同之处,如您所见。所以我没有得到任何结果,并做了printf陈述来看看问题可能出在哪里。因此,看起来我的长度没有正确计算。

旁注可能有助于解决我的问题 - 我为 memcmp 找到了这个,但这是否意味着我不能使用!=?:

if 返回值 if < 0 则表示 str1 小于 str2

if 返回值 if > 0 则表示 str2 小于 str1

if 返回值 if = 0 则表示 str1 等于 str2

请帮忙!