使用 strcmp 时报错

    unsigned long floor, stream_id;
    char *value, *mstrm;

    floor = strtoul(floor_id, &value, 10);
    if (!floor) {
        return SWITCH_STATUS_FALSE;
    }

    value++;

    mstrm = token(&value, SPACE, TOKEN, ":");
    if (!mstrm && strcmp(mstrm, "m-stream") && strcmp(mstrm, "mstrm")) {
        return SWITCH_STATUS_FALSE;
    }

    stream_id = strtoul(value, &value, 10);
    if (!stream_id || strcmp(value, "")) {
        return SWITCH_STATUS_FALSE;
    }

以上代码在编译的时候会提示:argument 1 null where non-null expected

意思是strcmp传入的参数可能是null,但是期望的是非null值。

在使用strcmp前有个判断 !mstrm. 如果mstrm是null的情况下,就不会执行后面的strcmp。

将!mstrm改成 mstrm != NULL 就不会在报错了.但是逻辑又不对了。

strcmp(const char* *s1, const char* s2):

当s1<s2时,返回为负数;

当s1=s2时,返回值= 0;

当s1>s2时,返回正数。

c中if语句:

if(表达式):表达式用非0值表示真,用0表示假值。

本意是想mstrm为空的情况下,并且不等于 m-stream或者mstrm的情况下返回false。

因此需要将第一个&&改为||,两个strcmp放在()里。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值