网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数: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
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示