【发布时间】:2011-12-19 17:09:15
【问题描述】:
如何检查char* 变量是否指向空字符串?
【问题讨论】:
如何检查char* 变量是否指向空字符串?
【问题讨论】:
检查第一个字符是否为 '\0'。您还应该检查您的指针是否为 NULL。
char *c = "";
if ((c != NULL) && (c[0] == '\0')) {
printf("c is empty\n");
}
您可以将这两个检查都放在一个函数中,以使其方便且易于重用。
编辑: 在 if 语句中可以这样理解,“如果 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");
}
【讨论】:
c && c[0] 是什么意思?你能解释一下吗?
c != NULL 而不是c 如果我正在审查代码会让你感到震惊,因为两者完全相同(只要c 是一个指针)并且更短form 是标准的 C 习语。仅当您想引起人类读者对正在发生的有趣事情的注意时才应使用非惯用形式,但这里没有发生任何有趣的事情,因此首选成语。
if (c && !*c)。
我的首选方法:
if (*ptr == 0) // empty string
可能更常见:
if (strlen(ptr) == 0) // empty string
【讨论】:
strlen 会更容易理解。
if (ptr == nullptr || *ptr == 0)
检查NULL 的指针,然后使用strlen 查看它是否返回0。NULL 检查很重要,因为将NULL 指针传递给strlen 会调用未定义行为。
【讨论】:
一个空字符串有一个空字节。所以测试if (s[0] == (char)0)
【讨论】:
(char) 演员表。
if (!*ptr) { /* empty string */}
类似
if (*ptr) { /* not empty */ }
【讨论】:
我更喜欢使用 strlen 函数,因为库函数以最好的方式实现。
所以,我会写 if(strlen(p)==0) //空字符串
【讨论】:
给它一个机会:
尝试通过函数gets(string)获取字符串 然后检查条件 if(string[0] == '\0')
【讨论】: