以下代码
#include <stdio.h>
int main( int argc, char** argv )
{
const char *s = "";
if (s == '\0') {
int x = 0;
}
return 0;
}
它不会进入循环。为什么? ,
答案 0 :(得分:4)
您已将s
定义为char的指针。碰巧,'\0'
是一个整数常量表达式,其值为0 - 空指针常量的定义。
IOW,你做的相当于if (s == NULL)
。由于s
实际指向字符串文字,因此它不是空指针,因此比较为假。
我猜你的意图是if (*s == '\0') ...
,应该比较为真。
答案 1 :(得分:2)
尝试
if (*s == '\0') {
int x = 0;
}
您想要比较s的值,而不是它的内存地址。
答案 2 :(得分:1)
s
是一个指针,此版本比较指针
const char *s = null;
if (s == '\0') {
int x = 0;
}
return 0;
并且此版本比较字符串的第一个元素以检测空字符串:
if (s[0] == '\0') {
int x = 0;
}