请参阅以下代码:
char h[256];
h[0]=NULL;
if(h!=NULL)
{
printf("It doesn't show NULL\n");
}
else
{
printf("It shows NULL\n");
}
以及以下内容:
char h[256];
if(h!=NULL)
{
printf("It doesn't show NULL\n");
}
else
{
printf("It shows NULL\n");
}
以及以下内容:
char h[256];
h[0]='\0';
if(h!=NULL)
{
printf("It doesn't show NULL\n");
}
else
{
printf("It shows NULL\n");
}
在每种情况下,char* h
都没有NULL。为什么会这样?它不是假设有NULL,因为我没有存储任何东西吗?如果不是这样,我怎么能确保它只包含NULL?
答案 0 :(得分:4)
h[0]
与h
不同。 h[0]
是数组中的第一个字符; h
是数组本身(在这种情况下会衰减到指针)。
试试这个:
char h[256];
h[0]=NULL;
if(h[0]!=NULL)
{
printf("It doesn't show NULL\n");
}
else
{
printf("It shows NULL\n");
}
另请注意,在这种情况下您可能不应该使用NULL
。 NULL
是指针;你需要'\0'
。
答案 1 :(得分:1)
由于您在堆栈上分配char[]
数组,因此它不能是NULL
。 h
始终指向内存中的有效位置,因此您的支票必须失败。
如果要在没有数据的情况下初始化阵列,则应使用
char h[256] = {'\0'};
'\0'
是NUL
字符,与NULL
答案 2 :(得分:1)
多数民众赞成是因为你的条件是if(h != NULL)
,这意味着你实际上在比较的h
地址肯定不会NULL
。如果它是if(*h != NULL)
,第一和第三种情况肯定会执行else
部分。从第二部分开始,它将在h [0]中包含一些垃圾值,所以如果它是0
,它将执行else
部分。
答案 3 :(得分:1)
定义
char h[256]
表示 h 是一个数组。数组不能是 NULL 。数组是存储器中存储一系列值的区域。
你在某种程度上将 h 与指针混淆。
即使它是一个指针,指针的值也不是指向的事物的值。
答案 4 :(得分:1)
而不是
if(h!=NULL)
为什么不使用
if(h[0]!=NULL)
当您将数组的第一个元素初始化为null时,而不是数组本身! 要确保元素为null,请使用
for(i=0; i<h.length ; i++)
h[i]=NULL;
或使用'\ 0'而不是NULL
至于为什么h不是NULL 尝试打印h 在java中,以下将返回@ .......值,这基本上是变量指向的位置。 (不是空的!)
System.out.println(c);
(自从使用c以来很长时间,所以不知道你是否可以在c中做类似的事情)