如何检查 char*
变量是否指向空字符串?
检查第一个字符是否为 '\0'。同时,你也应该检查指针是否为 NULL。
char *c = "";
if ((c != NULL) && (c[0] == '\0')) {
printf("c is empty\n");
}
你可以将这两个检查放在一个函数中,以便于重复使用。&&
仅仅是组合了这两种条件。它基本上像在说:“如果这个和那个都成立,那么就...”。if (c != NULL) { /* AND (or &&) */
if (c[0] == '\0') {
printf("c is empty\n");
}
}
如果您对此不清楚,可能需要一本好的C编程书籍。我可以推荐一本名为“C程序设计语言”的书。
与上述相等的最短版本如下:
if (c && !c[0]) {
printf("c is empty\n");
}
我偏爱的方法:
if (*ptr == 0) // empty string
可能更为常见:
if (strlen(ptr) == 0) // empty string
strlen
会更容易理解。请注意,翻译后的内容不能改变原文的意思。 - Mark Ransomptr
是空的呢? - Romárioif (ptr == nullptr || *ptr == 0)
- Mark Ransom检查指针是否为NULL
,然后使用strlen
来查看它是否返回0
。
NULL
的检查非常重要,因为将NULL
指针传递给strlen
会引发未定义行为。
if (s[0] == (char)0)
。(char)
转换。 - Jensif (!*ptr) { /* empty string */}
if (*ptr) { /* not empty */ }
我更倾向于使用strlen函数,因为库函数是以最佳方式实现的。
因此,我会编写以下代码: if(strlen(p)==0) //空字符串
给它一个机会:
尝试通过函数gets(string)获取字符串, 然后检查条件,即if(string[0] == '\0')
c && c[0]
是什么意思?你能解释一下吗? - Aanc != NULL
而不是c
,那么你会被扣分。因为只要c
是一个指针,这两种写法是完全相同的,而更短的形式是标准的 C 习惯用语。非惯用语形式只有在你想引起读者对某些有趣的事情的注意时才应该使用,但在这里没有什么有趣的事情发生,所以应该使用惯用语。 - zwolif (c && !*c)
。 - Mark Ransom