为什么assert(str!=NULL)不返回错误



为什么没有打印断言错误

这是我的代码:

#include<assert.h>
#include<stdio.h>
int main(){
int n =12;
char str[50] = "";
assert(n>=10);
printf("output :%dn",n);
assert(str!=NULL);
printf("output :%sn",str);
}
char str[50] = "";

这使str成为一个50个字符的数组,并将内存初始化为全零(第一个字节显式地来自"",其余字节隐式地,因为C不支持数组或结构的部分初始化(。


assert(str!=NULL);

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


如果您想测试数组的第一个元素是否为0,意味着需要的空字符串

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

您可以与0进行比较,或者只说assert(*str);,但与字符文字''进行比较会向代码的读者明确表示,您可能正在测试字符串终止的零字节,而不是其他类型的零,即使对于C编译器来说,它们都是一样的。

str是一个数组,它实际上是一个指针,表示存储数组的内存地址。如果指针没有指向内存中的任何特定位置,则指针为NULL。str指针不是null,它指向内存中包含50个元素数组的位置。

该数组是一个字符数组,也称为字符串。您将它初始化为一个空字符串,但它仍然存在,指向它的指针(str(仍然是一个有效的非NULL指针。

str=NULL并不意味着";str不是空字符串"!它的意思是";str不是未定义的指针";。

最新更新