You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:09:22