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放在()里。