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