代码之家  ›  专栏  ›  技术社区  ›  noobprogramer

为什么断言(str!=NULL)不返回错误?

  •  0
  • noobprogramer  · 技术社区  · 3 年前

    这是我的代码:

    #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);
    }
    
    2 回复  |  直到 3 年前
        1
  •  1
  •   hyde Juniar    3 年前
    char str[50] = "";
    

    这使得 str 并将内存初始化为全零(第一个字节显式来自 ""


    assert(str!=NULL);
    

    在表达式中使用时,数组被视为指向其第一个元素的指针。数组的第一个元素有一个地址,所以它不是 NULL .


    assert(str[0] != '\0');
    

    你可以和 0 ,或者只是说 assert(*str); '\0' 使代码的读者明白,您可能正在测试以零字节结尾的字符串,而不是其他类型的零,即使对于C编译器,它们都是相同的。

        2
  •  -1
  •   pdp8    3 年前

    str是一个数组,实际上是一个指针,这意味着数组存储在内存中的地址。如果指针不指向内存中的任何特定位置,则为空。str指针不是空的,它指向内存中包含50个元素的数组的位置。

    str=NULL并不意味着“str不是空字符串”!这意味着“str不是未定义的指针”。