【问题标题】:c/c++ what is the return value of strncmp when size is 0c/c++ size为0时strncmp的返回值是多少
【发布时间】: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

标签: c++ c size strncmp


【解决方案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的前缀都是相等的。
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多