问题标签 [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 投票
1 回答
521 浏览

c++ - memcmp / strcmp 与 uint64_t 比较

我有很多字符串,每个字符串的大小为 8 或更小。

我需要在那里使用memcmp()/进行大量比较strcmp()

我想知道如果我将它们全部转换为std::uint64_t. 在这种情况下,至少理论上比较将是无分支的,也将发生在单 CPU 操作中。

有没有人尝试过类似的东西?

这是一些生成这些数字的测试代码。我假设小端机器。

htobe32()我知道如果我使用/可以显着简化代码htobe64()

这是测试输出:

0 投票
1 回答
206 浏览

c - 为什么在 q==p 的情况下,memcmp 实现不快捷 memcmp(q, p, n)?

如果我memcmp为其第一个和第二个参数传递相等的指针,我怀疑它可能只返回 0 而不检查元素——因为如果传递相同的指针,则元素必须为零。在我看来,检查指针是否相等并提前退出是一个很好的优化。

我检查了glibcFree BSD LibC 实现,似乎都没有进行这种优化。

所以我检查了标准(如下):C99 的开放标准草案版本没有任何方式说明:

7.21.4.1 memcmp 函数概要

描述

memcmp 函数将 s1 指向的对象的前 n 个字符与 s2 指向的对象的前 n 个字符进行比较。

退货

memcmp 函数返回一个大于、等于或小于零的整数,相应地,因为 s1 指向的对象大于、等于或小于 s2 指向的对象

据我所知,它并没有禁止这样的“技巧”,因为仍然会得到相同的返回值。这确实是一个实现细节,AFAICT。

显然,编写这些库的人在这方面的思考比我多得多,所以可能有充分的理由不这样做。它是什么?

0 投票
2 回答
1399 浏览

c - 使用 memcmp 比较两个字符串文字

memcmp我已经使用该函数比较了两个字符串文字。

在上面的程序中,str2str1. 这意味着字符串str2被越界访问。

那么,这是未定义的行为吗?

0 投票
2 回答
513 浏览

c++ - 用于 pod 的重载运算符 ==

我正在处理一些具有高级接口的低级代码,并且觉得需要比较运算符来对普通旧数据类型(如 FILETIME 结构)进行单元测试,但由于 C++ 甚至不提供成员比较,所以我写了这个:

所以我的问题是,这是一个好方法还是有一些隐藏的恶魔会在开发周期的后期给我带来麻烦,但它现在有点工作。

0 投票
1 回答
148 浏览

c - memcmp 返回值,不一致的注释

这是一个小 C 代码,用于突出 memcmp 返回值的问题:

标准输出是:

有没有说明这两个函数调用之间的区别?谢谢你的帮助。

铿锵版本:

Apple LLVM 版本 9.0.0 (clang-900.0.39.2) 目标:x86_64-apple-darwin16.7.0

0 投票
0 回答
76 浏览

c - 将 memcmp 与 DOS 远指针一起使用

我有一个 1995 年编写的旧程序。它是用 Borland C 和 DOS 6.22 编写的。它使用具有不同细分数据的远模型。该程序使用 EMS 内存,这就是为什么指针需要很远。我需要使用 memcmp(a, b, c) 但我收到错误“警告 panel.c 325:函数 enterPanel 中的可疑指针转换”,我怀疑这是因为我有一个远指针。我应该使用远版本的 memcpy 吗?(我搜索过这样的功能,但找不到)。您可能想知道为什么我不只是编写循环代码,而是想使用内在功能来获得最快的速度。

这是我的代码的一个片段:

我也尝试删除(_far *)。

0 投票
3 回答
959 浏览

c - 如何在姓名前添加验证 mr 或 mrs

我正在使用带有do while语句的名称之前使用 Mr 或 ms 或 Mrs 进行输入名称的验证。我应该在while部分填写什么?

它是使用 strcmp 还是其他东西?

编码示例

0 投票
2 回答
332 浏览

c++ - 如果将两个相同的指针作为输入传递,memcmp 会做什么?

我正在将两个字节数组与memcmp(或者更确切地说是一个库函数)进行比较。数组可以变得相对较大,并且在许多情况下它们实际上可以是同一个数组。

写这样的东西有意义吗,还是memcmp已经在内部这样做了?

0 投票
6 回答
2390 浏览

c++ - 如何比较 C++ 中的泛型结构?

我想以一种通用的方式比较结构,我做了这样的事情(我不能分享实际的来源,所以如果需要,请询问更多细节):

这主要按预期工作,除了有时它返回 false 即使两个结构实例具有相同的成员(我已经用 eclipse 调试器检查过)。经过一番搜索,我发现memcmp由于使用的结构被填充而可能会失败。

有没有更合适的方法来比较与填充无关的内存?我无法修改使用的结构(它们是我正在使用的 API 的一部分),并且使用的许多不同的结构有一些不同的成员,因此不能以通用的方式单独比较(据我所知)。

编辑:不幸的是,我坚持使用 C++11。早该提到这个...

0 投票
0 回答
70 浏览

c - C - 在 Cortex-R5 上的 memcmp 期间偶尔出现 CPU 停顿

我正在 Cortex-R5(超大规模 MpSoC)上运行一些测试。它基本上使用硬件模块生成 2 个随机数,并在最后比较它们以确保它们不是 0,也不是相同的值。

一些测试运行良好。打印“memcmp 0”后,某些执行会停止(当它冻结时,它总是在第一个 memcmp)......

我尝试了几件事:

  • 当我打印字节 1 和 2 中的值时,它们确实是不等于 0 且彼此不相等的随机数。
  • 将 memcmp 移动到不同的位置,或切换 memcmp 的。它总是第一个冻结。
  • 用自定义函数替换 memcmp 进行比较 => 它永远不会冻结。
  • memcmp 函数在代码的其他地方使用,它不会在其他地方冻结。也许不同之处在于随机检查是 memcmp 期望不同值的唯一地方(在其他地方,它是为了确保函数产生预期的输出)。

我找不到 memcmp 的定义...我不知道去哪里找。我唯一能找到的是汇编代码,但是很难附加一个调试器来确切地知道哪条指令不能完成。

  1. 我在哪里可以看到 cortex R5 的 memcmp 的源代码?仅供参考,使用的编译器是 armr5-none-eabi-gcc。
  2. 知道什么可能导致此功能导致 CPU 停顿吗?

谢谢