为什么assert(str!=NULL)未触发断言错误?
为何代码中的
assert(str!=NULL)未触发断言错误? 问题代码
#include<assert.h> #include<stdio.h> int main(){ int n =12; char str[50] = ""; assert(n>=10); printf("output :%d\n",n); assert(str!=NULL); printf("output :%s\n",str); }
原因解析
- 数组名的本质:
char str[50]是在栈上分配的固定长度字符数组,数组名str在表达式中会自动转换为指向数组首元素的指针(等价于&str[0])。这个指针指向的是栈上已分配的有效内存地址,永远不可能等于NULL。 NULL的定义:NULL代表空指针,即不指向任何有效内存的指针。而数组是实际分配了内存的实体,它的首地址必然是有效的,因此str != NULL的判断结果恒为真,断言不会触发。
触发断言的正确场景
如果想要让assert(str!=NULL)触发错误,需要将数组改为指针并赋值为NULL,示例代码如下:
#include<assert.h> #include<stdio.h> int main(){ char *str = NULL; // 声明空指针 assert(str != NULL); // 此断言会触发错误 }
内容的提问来源于stack exchange,提问作者noobprogramer
相关产品推荐
相关产品推荐

