gpt4 book ai didi

c - memcmp 应该返回什么?

转载 作者:行者123 更新时间:2023-12-02 05:24:29 26 4
gpt4 key购买 nike

我想知道 memcmp 函数必须返回什么。

我一直在 Internet 上搜索,通常 memcmp 定义如下所示:

The memcmp() function returns an integer greater than, equal to, or less than zero, accordingly as the object pointed to by s1 is greater than, equal to, or less than the object pointed to by s2.

从未明确说明返回的确切是什么:它是两个字节值之间的差异,还是 -1、0 或 1?我很困惑:

  • 在一个小程序中测试函数 memcmp 时,它返回 -1、0 或 1,即使计算的两个字节之间的差异大于 1 或小于 -1。<
  • 在 Internet 上查看名为 memcmp 的函数时,它们几乎都以 int 形式返回 2 个字节之间的差异,而不是返回 -1、0 或 1。

因为我无法获得函数 memcmp 的足够精确的定义,所以我在这里问这个问题:函数 memcmp 应该返回什么?某处有“官方”源代码吗? (我看过很多memcmp的源代码,但没有一个给我答案:我假设它们不是写在库string.h中的函数,至少在我的电脑上不是...)

最佳答案

memcmp() 返回的特定值未由标准指定。 C11 标准草案确实在 §7.24.4 1 中说:

The sign of a nonzero value returned by the comparison functions memcmp, strcmp, and strncmp is determined by the sign of the difference between the values of the first pair of characters (both interpreted as unsigned char) that differ in the objects being compared.

因此只有比较函数的非零返回值的符号才是有意义的。此处给出的自由度允许每个实现按照它认为合适的方式解释这些要求。

另请注意,没有“官方源代码”;标准是 C 实现必须遵守的文档。即使阅读用于查找用于生成 memcmp() 返回值的底层方法的实现的源代码,在代码中使用这些值充其量也是不可移植的,并且容易受到该实现的 future 变化。

关于c - memcmp 应该返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44975110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com