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语言strncmp()函数(把 str1 和 str2 进行比较,最多比较前 n 个字节)
MFC中socket编程时recv设置超时属性后,如果超时返回值是啥?谢谢大家:)
java中list的值是[null] 而不是 null ,结果集其实是空的,但是返回的却是[null],size=1,这如何判断