【问题标题】:How can I check if char* variable points to empty string?如何检查 char* 变量是否指向空字符串?
【发布时间】:2011-12-19 17:09:15
【问题描述】:

如何检查char* 变量是否指向空字符串?

【问题讨论】:

    标签: c pointers char


    【解决方案1】:

    检查第一个字符是否为 '\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");
    }
    

    【讨论】:

    • @Zack:c && c[0] 是什么意思?你能解释一下吗?
    • 就我个人而言,我会将空指针的检查与空字符串的检查分开;两者并没有真正的关系。 “更便携”可能并不是您真正想说的,因为您在此处提供的所有代码都是有效的 C(以及 C++)。
    • c != NULL 而不是c 如果我正在审查代码会让你感到震惊,因为两者完全相同(只要c 是一个指针)并且更短form 是标准的 C 习语。仅当您想引起人类读者对正在发生的有趣事情的注意时才应使用非惯用形式,但这里没有发生任何有趣的事情,因此首选成语。
    • 比“最短版本”短的一个字符是if (c && !*c)
    【解决方案2】:

    我的首选方法:

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

    可能更常见:

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

    【讨论】:

    • 请注意,第二种“更常见”的可能性也不必要地慢了。
    • @jpalecek,速度通常并不重要,如果您不习惯第一种形式,strlen 会更容易理解。
    • @Adban,在这个网站上感谢某人的最佳方式是点击答案旁边的向上箭头 :)
    • @MarkRansom:你什么都没问我哈! :) 采取+1。
    • @Romário 专门提出的问题“指向一个空字符串”,所以这就是我回答的问题;空指针完全是另一回事。你可以将 null 测试与我上面给出的其他测试结合起来,如果你把它放在第一位,短路规则将阻止你取消引用 null 指针。 if (ptr == nullptr || *ptr == 0)
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      一个空字符串有一个空字节。所以测试if (s[0] == (char)0)

      【讨论】:

      • 不需要(char) 演员表。
      【解决方案5】:
      if (!*ptr) { /* empty string  */}
      

      类似

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

      【讨论】:

      • @igraczech,嗯,这应该适用于这种情况 char *str = ""; if (!*str) { printf("empty\n"); }。我错过了一些微妙的案例吗?
      • 对不起,你是对的——这是我愚蠢的 C 指针疏忽。我遇到过 str 指向的地址仅包含 '\0' 的情况。所以指针 (*str) 是非空的,其中值(str 指向的地址内容)为空。
      【解决方案6】:

      我更喜欢使用 strlen 函数,因为库函数以最好的方式实现。

      所以,我会写 if(strlen(p)==0) //空字符串

      【讨论】:

      • 好主意,让我们遍历整个字符串(据您所知,它的大小可能是 2GB)只是为了找出它是否包含至少一个字符! 讽刺>
      • @KevinBallard 虽然你是对的,但没必要对此感到厌烦。
      【解决方案7】:

      给它一个机会:

      尝试通过函数gets(string)获取字符串 然后检查条件 if(string[0] == '\0')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-13
        • 1970-01-01
        • 2020-05-28
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 2019-01-25
        • 2013-12-15
        相关资源
        最近更新 更多