当 size 为 0 时,strncmp 的返回值是 0。

7

c/c++的strncmp函数签名如下:

int strncmp ( const char * str1, const char * str2, size_t num );

我的问题是,如果num为0,返回值是什么?标准怎么说?在一些在线文档中没有找到答案。
谢谢。

从逻辑上讲,应该是0,因为没有一种方式可以使其中一个字符串大于或小于另一个字符串。 - Mark Ransom
你可以随时试一试 - ellotheth
1个回答

8

strncmp函数比较两个字符串的前num个字符,当num == 0时,不会比较任何字符,所以没有发现差异,因此返回0


但这没有意义。返回0表示两个字符串是相同的,实际上它们并不相同。如果标准是这样规定的,那么我认为这是一个标准中的错误。无论返回0还是1,都不是一个合理的值,我认为。 - nowgains nowpains
4
一个包含零个字符的字符串与另一个包含零个字符的字符串是相同的。 - Eric Postpischil
3
尽管从strcmp函数返回0意味着字符串相等,但这并不适用于strncmp函数。对于该函数,返回0意味着前n个字符的子字符串相等。将n参数传递为0有效地比较两个空字符串,它们确实相等。 - Sergey Kalinichenko
1
@nowgainsnowpains strncmp 比较两个字符串的初始部分,并且如果第一个字符串的长度为 num 的前缀等于、大于或小于第二个字符串的长度为 num 的前缀,则返回 0、正值或负值。任何字符串的长度为 0 的前缀都是空字符串,因此所有长度为 0 的前缀都相等。 - Daniel Fischer
另一种思考方式是:想象一下 strncmp(a, b, n) 逻辑上首先执行的是 strndup(a, n)strndup(b, n),然后将结果传递给 strcmp - R.. GitHub STOP HELPING ICE
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接