gpt4 book ai didi

c - memcmp(ptr1, ptr2, 0) 的返回值?

转载 作者:太空狗 更新时间:2023-10-29 14:53:20 25 4
gpt4 key购买 nike

阅读中:How can I check that elements of an array are all same without using counter? ,@Skizz 使用漂亮的解决方案:

memcmp (&string [0], &string [1], sizeof string [0] * (N - 1))

所以如果 N 恰好为 1,我们得到

memcmp (&string [0], &string [1], 0)

比较长度为0时返回值一定为0吗?


测试用例(Cygwin gcc 版本 4.8.1 windows 64 位)返回 0 .所以我知道在这个和其他一些编译器/平台上它是 0。

printf("%d\n", memcmp("foo", "bar", 0));

C11 规范草案紧随其后,但在这个问题上似乎保持沉默。也许规范的另一部分或其他内容说明了什么?

7.24.4.1 memcmp函数
内容提要

#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);

描述
memcmp 函数将 s1 指向的对象的前 n 个字符与s2 指向的对象的前 n 个字符。

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


(假设 &string [1] 没有引用非法内存)

最佳答案

规范的相关部分真的是这个

7.21 String handling

7.21.1 String function conventions

2 Where an argument declared as size_t n specifies the length of the array for a function, n can have the value zero on a call to that function. Unless explicitly stated otherwise in the description of a particular function in this subclause, pointer arguments on such a call shall still have valid values, as described in 7.1.4. On such a call, a function that locates a character finds no occurrence, a function that compares two character sequences returns zero, and a function that copies characters copies zero characters.

这意味着当提供的序列长度为零时,memcmp 保证返回零。

关于c - memcmp(ptr1, ptr2, 0) 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19034858/

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