0

以下代码

#include <stdio.h>
int main( int argc, char** argv ) 
{
    const char *s = "";
    if (s == '\0') {
        int x = 0;
    }
    return 0;
}

它不会进入循环。为什么 ?,

4

3 回答 3

4

您已定义s为指向 char 的指针。碰巧,'\0'是一个值为 0 的整数常量表达式——空指针常量的定义。

IOW,你正在做相当于if (s == NULL). 由于s实际上指向一个字符串文字,它不是一个空指针,所以比较是错误的。

我猜你的意图是if (*s == '\0') ...,这应该比较为真。

于 2013-01-28T05:32:19.597 回答
2

尝试

   if (*s == '\0') {
        int x = 0;
    }

您想比较 s 的值,而不是它的内存地址。

于 2013-01-28T05:31:45.520 回答
1

s是一个指针,这个版本比较指针

const char *s = null;
if (s == '\0') {
    int x = 0;
}
return 0;

这个版本比较字符串的第一个元素来检测一个空字符串:

if (s[0] == '\0') {
   int x = 0;
 }
于 2013-01-28T05:32:04.123 回答