c/c++ size为0时strncmp的返回值是多少

Posted

技术标签:

【中文标题】c/c++ size为0时strncmp的返回值是多少【英文标题】:c/c++ what is the return value of strncmp when size is 0 【发布时间】:2013-01-18 21:27:54 【问题描述】:

c/c++ strncmp 签名如下:

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

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

谢谢。

【问题讨论】:

逻辑上它应该是 0,因为其中一个字符串不可能大于或小于另一个。 你总是可以try it and see。 【参考方案1】:

嗯,strncmp 最多比较两个字符串中的num 个字符,所以对于num == 0,它不比较,因此没有发现差异,因此返回 0。

【讨论】:

但这没有任何意义。返回 0 表示两个字符串相同。实际上没有。如果这是标准所说的,那么我认为这是标准中的一个错误。无论返回 0 还是 1,我认为都不是一个合理的值。 @nowgainsnowpains:包含零个字符的字符串与包含零个字符的另一个字符串相同。 @nowgainsnowpains 虽然从 strcmp 返回 0 表示字符串相等,但对于 strncmp 不成立。对于该函数,返回 0 意味着第一个 n 字符的子字符串相等。为n 传递零实际上意味着比较两个空字符串,它们确实彼此相等。 @EricPostpischil 公平解释。谢谢。 @nowgainsnowpains strncmp 比较两个字符串的初始部分,如果第一个字符串的长度为num 的前缀等于或大于或小于,则返回0、正值或负值比第二个字符串的长度为num 的前缀。任何字符串长度为0的前缀都是空字符串,所以所有长度为0的前缀都是相等的。

以上是关于c/c++ size为0时strncmp的返回值是多少的主要内容,如果未能解决你的问题,请参考以下文章

C语言中的main()函数返回值是啥?

C语言strncmp()函数(把 str1 和 str2 进行比较,最多比较前 n 个字节)

c语言问题。大家帮忙!

MFC中socket编程时recv设置超时属性后,如果超时返回值是啥?谢谢大家:)

java中list的值是[null] 而不是 null ,结果集其实是空的,但是返回的却是[null],size=1,这如何判断

模拟实现strncpy,strncat,strncmp