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

Aan*_*Aan 49 c pointers char

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

cod*_*ker 88

检查第一个字符是否为'\ 0'.您还应该检查指针是否为NULL.

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

您可以将这两个检查放在一个函数中,以便于重用.

编辑:在if语句中可以像这样读取,"如果c不为零且字符数组'c'的第一个字符不是'\ 0'或零,那么......".

&&简单地结合了两个条件.这基本上就像这样说:

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

如果你不清楚,你可能想要一本好的C编程书.我可以推荐一本名为"The C Programming Language"的书.

相当于上述的最短版本将是:

if (c && !c[0]) {
  printf("c is empty\n");
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我正在查看代码,那么编写`c!= NULL`而不仅仅是`c`会让你感到厌烦,因为两者完全相同(只要`c`是指针),而较短的形式是标准C成语.只有当你想让读者注意到有趣的东西时,才应该使用非语言形式,但这里没有什么可笑的,所以,成语是首选. (8认同)
  • 比"最短版本"短一个字符的是"if(c &&!*c)". (3认同)

Mar*_*som 11

我的首选方法:

if (*ptr == 0) // empty string
Run Code Online (Sandbox Code Playgroud)

可能更常见:

if (strlen(ptr) == 0) // empty string
Run Code Online (Sandbox Code Playgroud)

  • 请注意,第二种"更常见"的可能性也不必要地慢. (6认同)
  • @jpalecek,慢慢并不重要,如果你不习惯第一种形式,`strlen`会更容易理解. (4认同)
  • @Romário 专门问的问题“指向一个空字符串”,所以这就是我回答的问题;空指针完全是另一回事。您可以将 null 测试与我上面给出的其他测试结合起来,如果您将其放在首位,短路规则将阻止您取消引用空指针。`if (ptr == nullptr || *ptr == 0)` (3认同)

Alo*_*ave 9

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


Bas*_*tch 6

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

  • 不需要`(char)`演员. (3认同)