偶然碰到
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的指针进行下标访问是非法的。
本文探讨了C语言中指向空字符串的指针的行为,并通过示例代码解释了为何这样的指针会被认为是非空的,同时揭示了访问NULL指针所指向的内存会导致段错误。

557

被折叠的 条评论
为什么被折叠?



