令自己“诧异”的底层函数 -- strcmp (一直以为掌握了,其实没有)

博客揭示了strcmp函数的实际行为可能与预期不同,尤其是在Ubuntu下。虽然通常认为strcmp返回-1, 0或1,但作者发现Ubuntu的实现可能有其他情况。微软的strcmp确实限制为这三个值。作者在Ubuntu下用gcc编译测试代码时,发现当使用指针而非常量字符串时,strcmp的行为出现了意料之外的结果,怀疑这可能是由于GCC的优化导致。博客鼓励读者探究strcmp在处理不同参数类型时的行为差异。" 107384833,9329892,黎曼曲面与多值函数解析,"['数学', '复分析', '黎曼几何', '函数理论']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

strcmp函数在一般人的印象中都是返回-1,0,1三者,其中之一的…… 但实际上准确的说,和底层该函数的实现有关,ubuntu下对其的描述是这样的:


SYNOPSIS
       #include <string.h>
       int strcmp(const char *s1, const char *s2);
DESCRIPTION
       The  strcmp()  function compares the two strings s1 and s2.  It returns an integer less than, equal to,
       or greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2.


但微软提供的strcmp仅返回-1,0,1三者之一,大家后续使用strcmp时一定要ubuntu的des来使用,最稳妥!切记不要用switch,自己今天使用的是switch ... case -1: case 0: case :1,然后就有了一些列问题!!! 


如果简简单单的是因为这个,而让自己纠结了几个小时那自己也太菜了,事实上,自己一开始也想到了返回值的问题! 

可是当自己在ubuntu下用gcc编译自己用来测试的几行代码时 —— 想检测下strcmp的返回值 —— 发现了如下有点诧异的地方!!!&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值