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