0

每当我使用短路或(|)时,以下代码会出现段错误,并且在不短路(||)时编译完美?

编译使用gcc -Wall ../IsNull/IsNull.c ../IsEmpty/IsEmpty.c *.c -o IsNullOrEmpty

#include <stdbool.h>

#include "../IsNull/IsNull.h"
#include "../IsEmpty/IsEmpty.h"

#include "IsNullOrEmpty.h"

_Bool isNullOrEmpty (char *str);

_Bool isNullOrEmpty (char *str) {
    return (isNull (str) | isEmpty (str));     
} /* end of isNullOrEmpty() */
4

2 回答 2

7

您应该使用||逻辑或运算符)而不是|按位或运算符)。前者短路而后者不短路因此出现分段错误。

于 2012-09-22T16:57:01.697 回答
2

按位 Or ( |) 不能短路,因为它不是布尔表达式的一部分。它只是一个操作(如 sum ),因此 必须执行每一方以产生实际上是or函数返回的两个值的每位位的结果。

于 2012-09-22T17:00:35.113 回答