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

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

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

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

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

不,我见过这三个人。 就个人而言,我用

 if (!str[0]) 

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

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

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

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

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

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

除此以外:

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

忘了strlen()

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

我肯定会选择strlen(str) == 0 ,只是为了清晰起见。

该函数应该实现如下:

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

所以不会有太大的开销。

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