在C中检查空字符串的惯用法?
在当前的代码库中,我看到的至少是这些:
if(strlen(str) == 0)
-
if(str[0] != 0)
-
if(!*str)
它的类似变体是空的/非空的。 第一个读得更好,但可能浪费时间(可能也可能不重要)。 我想可以制作一个#define STR_EMPTY(str) (*(str) == 0)
宏。
但无论如何,是否有一个共同商定的方法来检查C中的字符串是否为空(?)
不,我见过这三个人。 就个人而言,我用
if (!str[0])
使用strlen会浪费处理器时间并且不安全,除非您可以保证字符串终止。
-
if(strlen(str) == 0)
– >如果str==NULL
(你需要在使用strlen
之前检查它if(strlen(str) == 0)
它会崩溃 -
if(str[0] != 0)
– >与上面相同 -
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; }
所以不会有太大的开销。
编辑:假设您确定该字符串实际上是零终止。