2011-11-01 178 views

回答

65

检查第一个字符是否为'\ 0'。你也应该检查你的指针是否为NULL。

char *c = ""; 
if ((c != NULL) && (c[0] == '\0')) { 
    printf("c is empty\n"); 
} 

您可以将这两项检查放在一个函数中,以方便重复使用。如果c不是零,并且字符数组'c'的第一个字符不是'\ 0'或零,那么......“。如果c不是零,并且字符数组'c'的第一个字符不是'\ 0'或零,那么...”。

&&简单地结合了这两个条件。这基本上是这样说的:

if (c != NULL) { /* AND (or &&) */ 
    if (c[0] == '\0') { 
     printf("c is empty\n"); 
    } 
} 

如果你不清楚你可能想得到一个好的C编程书籍。我可以推荐一本名为“The C Programming Language”的书。

相当于最短的版本上面会:

if (c && !c[0]) { 
    printf("c is empty\n"); 
} 
+0

@Zack:c && c [0]是什么意思?你能解释一下吗? – Aan

+0

我将编辑答案。 – codemaker

+0

就我个人而言,我将检查空字符串检查的空指针;这两者并不真正相关。 “更便携”可能不是你想说的,因为你在这里展示的所有代码都是有效的C(和C++)。 –

10

检查指针NULL,然后使用strlen查看它是否返回0
NULL检查很重要,因为通过NULL指针指向strlen会调用未定义的行为

+0

非常感谢Als – Aan

9

我的优选方法:

if (*ptr == 0) // empty string 

可能更常见:

if (strlen(ptr) == 0) // empty string 
+4

请注意,第二个“更常见”的可能性也不必要地慢。 – jpalecek

+1

@jpalecek,缓慢通常并不重要,如果你不习惯第一种形式,“strlen”会更容易理解。 –

+0

感谢Mark Ransom。 – Aan

6

空字符串具有一个单一的空字节。因此,测试if (s[0] == (char)0)

+2

不需要'(char)'强制转换。 – Jens

0
if (!*ptr) { /* empty string */} 

同样

if (*ptr) { /* not empty */ } 
+1

@igraczech,嗯,这应该适用于这种情况char * str =“”; if(!* str){printf(“empty \ n”); }。我错过了一些微妙的情况吗? – alvin

+0

对不起,你是对的 - 这是我愚蠢的C指针监督。我有这样的情况,str只是指向一个包含'\ 0'的地址。所以指针(* str)在值(str指向的地址的内容)为null时是非空的。 – igraczech

1

我宁愿使用strlen功能库函数以最好的方式来实现。

所以,我会写 如果(strlen的(P)== 0)//空字符串

+1

好主意,让我们遍历整个字符串(你知道,它的大小可以是2GB),以查明它是否至少包含一个字符! –

+0

我很抱歉..你是对的.. – bhuwansahni

+0

我发现strlen会导致崩溃,如果char *为NULL ... – Todd

1

给它一个机会:

尝试获得通过字符串函数获得(串) 然后检查条件如果(字符串[0] =='\ 0')

相关问题