偶然碰到
char *str="";
if(str)
printf("str/n");
if(!str)
printf("!str/n");
输出 str , 对结果感到疑惑
使用下列代码进行测试
int main()
58 {
59 char *str="";
60 char *str2=NULL;
61
62 if(str)
63 printf("str/n");
64 if(!str)
65 printf("!str/n");
66
67 if(str2)
68 printf("str2/n");
69 if(!str2)
70 printf("!str2/n");
71
72 printf("str= %d/n",str);
73 printf("str2= %d/n",str2);
74
75 printf("str[0]=%d/n",str[0]);
76 printf("str2[0]=%d/n",str2[0]);
77 return 0;
78 }
输出结果:
str
!str2
str= 134513988
str2= 0
str[0]=0
段错误
其实很简单,str的值是全局静态区中的一地址,而对指向NULL的指针进行下标访问是非法的。