为什么有时对字符串进行两次检查?

k99

我看到了这段代码:

char *str;
// Some code
if (! str || ! *str)
    return str;

为什么需要检查! *str?还if (! str)不够吗?

让我们看一个真值表:

str    *str    !str   !*str   !str || !*str
T      T       F      F       F
F      T       T      F       T
T      F       F      T       T
F      F       T      T       T

因此,如果str是一个NULL指针,则!str它将为true,str并且始终返回。如果str不是NULL指针,则str仅当*str是NUL终止符时才返回

请注意,您可以使用布尔代数将其重写为!(str && *str)括号可以用英语表示为“非空字符串”。因此整个条件是“非非空字符串”。

请注意,它的工作是由于短路,这意味着如果||的结果&&只能由左操作数确定,则将不评估右操作数。否则,当str为NULL指针时,取消引用将产生未定义的行为

在这里,有一个非常重要的逻辑要注意。仅仅因为字符串不是“不为空”,并不一定意味着它为空。但这取决于解释。共有三种情况,下面是所有示例。

  • "Hello, World\0" -绝对不是空的
  • "\0" -绝对是空的
  • NULL -绝对不是“不为空”,但是它是空的吗?

我可能会补充说,这是返回的相当奇怪的条件str这通常不是您要做的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C中使用printf时,为什么字符串两次打印两次?

来自分类Dev

有时要进行两次循环打印

来自分类Dev

为什么 data.table 有时需要按两次“输入”才能打印?

来自分类Dev

React w Gatsby:为什么有时我的字体文件被下载了两次

来自分类Dev

为什么有时将本机redux reducer调用两次,有时只调用一次?

来自分类Dev

为什么我的Regex.Replace字符串两次包含替换值?

来自分类Dev

为什么有时需要为C链接列出两次库,这是可以避免的?

来自分类Dev

为什么有时在计时器滴答事件中它连续两次调用该方法?

来自分类Dev

为什么有时TypeScript只能通过字符串为对象建立索引

来自分类Dev

为什么有时我的字符串索引超出范围?

来自分类Dev

为什么map [time.Time]字符串有时不起作用?

来自分类Dev

分割字符串两次

来自分类Dev

为什么Android Beacon Library didRangeBeaconsInRegion 有时会触发两次?

来自分类Dev

为什么我的函数有时会平方两次?

来自分类Dev

检查目录中的所有文件是否包含特定字符串两次或更多次

来自分类Linux

为什么某些正则表达式引擎在单个输入字符串中两次匹配。*?

来自分类Dev

为什么以下字符串在以下 if-else 语句中被控制台记录两次?

来自分类Dev

为什么我必须为输入的每个字符串按两次Enter键?

来自分类Dev

WinForms有时出现两次,有时出现一次

来自分类Dev

为什么它有时表示整个字符串,有时又表示Kotlin中的每个字符?

来自分类Dev

为什么在这里对c ++输入文件流进行了两次检查?

来自分类Dev

为什么借贷检查器让我进行两次可变借贷?

来自分类Dev

检查用户是否使用数组两次输入了相同的字符串

来自分类Linux

为什么Python中的空字符串有时占据49个字节,有时占据51个字节?

来自分类Dev

为什么有时将字符串写在一个方向上,有时又写在另一个方向上?

来自分类Dev

有什么方法可以对字符串用户定义的文字进行编译时检查?

来自分类Dev

为什么即使在 C++ 中不包含字符串库,字符串有时仍然有效?

来自分类Dev

为什么在与字符串数组一起使用时JSON.parse有时返回错误?

来自分类Dev

两次使用相同的字符串标记进行规则

Related 相关文章

  1. 1

    在C中使用printf时,为什么字符串两次打印两次?

  2. 2

    有时要进行两次循环打印

  3. 3

    为什么 data.table 有时需要按两次“输入”才能打印?

  4. 4

    React w Gatsby:为什么有时我的字体文件被下载了两次

  5. 5

    为什么有时将本机redux reducer调用两次,有时只调用一次?

  6. 6

    为什么我的Regex.Replace字符串两次包含替换值?

  7. 7

    为什么有时需要为C链接列出两次库,这是可以避免的?

  8. 8

    为什么有时在计时器滴答事件中它连续两次调用该方法?

  9. 9

    为什么有时TypeScript只能通过字符串为对象建立索引

  10. 10

    为什么有时我的字符串索引超出范围?

  11. 11

    为什么map [time.Time]字符串有时不起作用?

  12. 12

    分割字符串两次

  13. 13

    为什么Android Beacon Library didRangeBeaconsInRegion 有时会触发两次?

  14. 14

    为什么我的函数有时会平方两次?

  15. 15

    检查目录中的所有文件是否包含特定字符串两次或更多次

  16. 16

    为什么某些正则表达式引擎在单个输入字符串中两次匹配。*?

  17. 17

    为什么以下字符串在以下 if-else 语句中被控制台记录两次?

  18. 18

    为什么我必须为输入的每个字符串按两次Enter键?

  19. 19

    WinForms有时出现两次,有时出现一次

  20. 20

    为什么它有时表示整个字符串,有时又表示Kotlin中的每个字符?

  21. 21

    为什么在这里对c ++输入文件流进行了两次检查?

  22. 22

    为什么借贷检查器让我进行两次可变借贷?

  23. 23

    检查用户是否使用数组两次输入了相同的字符串

  24. 24

    为什么Python中的空字符串有时占据49个字节,有时占据51个字节?

  25. 25

    为什么有时将字符串写在一个方向上,有时又写在另一个方向上?

  26. 26

    有什么方法可以对字符串用户定义的文字进行编译时检查?

  27. 27

    为什么即使在 C++ 中不包含字符串库,字符串有时仍然有效?

  28. 28

    为什么在与字符串数组一起使用时JSON.parse有时返回错误?

  29. 29

    两次使用相同的字符串标记进行规则

热门标签

归档