在C中检查空字符串的惯用方法?

时间:2012-03-07 21:52:04

标签: c

在当前的代码库中,我至少看到了这些:

  • if(strlen(str) == 0)
  • if(str[0] != 0)
  • if(!*str)

类似的变体是空的/非空的。第一个读得更好,但可能浪费时间(可能也可能不重要)。我想可以制作一个#define STR_EMPTY(str) (*(str) == 0)宏。

但无论如何,是否有一种共同商定的方法来检查C中的字符串是否为空?

5 个答案:

答案 0 :(得分:4)

没有。我见过这三个人。就个人而言,我使用

if (!str[0])

使用strlen会浪费处理器时间并且不安全,除非您能保证字符串被终止。

答案 1 :(得分:3)

  1. if(strlen(str) == 0) - >如果str==NULL(您需要在使用strlen之前检查它)崩溃
  2. if(str[0] != 0) - >与上述相同
  3. if(!*str) - >这实际上与 2)
  4. 做同样的事情

    总结一下:如果你想安全地做到这一点:

    if(!str || !(*str)) { /* empty string or NULL */ }
    

答案 2 :(得分:1)

如果您已经知道str是非空的:

if (!*str) {
    // empty string
}

否则:

if (!str || !*str) {
    // empty string
}

忘掉strlen()

答案 3 :(得分:0)

你所有的例子都很好。应该清楚的是,所有三个都在你的代码库中,没有“共同商定”的方法。

答案 4 :(得分:0)

为了清楚起见,我肯定会选择strlen(str) == 0

该功能应该实现如下:

int strlen(char *s) {
  int len = 0;
  while(*(s++)) len++;
  return len;
}

所以没有太大的开销。

编辑,假设您确定该字符串实际上是零终止。