网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月31日漏签0天
c语言吧 关注:801,694贴子:4,374,653
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 8回复贴,共1页
<<返回c语言吧
>0< 加载中...

为什么strcmp在字符串相同时返回0?

  • 只看楼主
  • 收藏

  • 回复
  • 贴吧用户_035PAGZ
  • 团子家族
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
之前没注意过这个问题,一直当c库的约定俗成。今天用的时候突然发现strcmp语义上是字符串比较,那不应该像比较符号==在字符串相同时返回1(true)吗?虽然我知道strcmp内部是字符串逐位相减,但这样不就让库函数的语义变得混乱了?到底为什么要这样设计呢?


  • 滑稽大人-
  • 团子家族
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
c语言是0与非0,这个函数我记得字符串不同会返回正数或负数啊,相同返回0,正负数都是非0数。c99,c++,c#就有了bool型了,


2025-12-31 08:49:06
广告
不感兴趣
开通SVIP免广告
  • 宇文nick
  • 彩虹面包
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
人家的语意本来就是要比较两个字符串的关系:大于/等于/小于 你要非得理解成只有相等和不相等这两种关系,那也没办法


  • LS_Hower
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
假定使用 ASCII,那么 strcmp("class", "clang") 就返回正数(比较可能是 1 或者 5),因为 's' 是 0x73,而 'n' 是 0x6E。反过来就返回负数。总之是通过正、零、负表达出字符串内容的“大于”“小于”“等于”的关系。


  • GTA小鸡
  • 吧主
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
因为strcmp返回大于/相等/小于三种关系而不是相等/不想等两种关系


  • Clannad
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • XeO2
  • 小吧主
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
把strcmp当作==(判等),那你就输了,因为strcmp做的事情更接近于减法,两个相等的东西相减当然应该等于零。
另外compare的意思本来就是比较,又不是相等(等于),equal to才是等于,所以如果存在你想象中的那个函数,它应该叫strequ而不是strcmp


  • 豪杰兴邦
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
strcmp是按位减法


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 8回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示