1

请看以下代码:

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?

4

5 回答 5

4

h[0]不一样hh[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'的。

于 2012-05-15T14:52:21.800 回答
1

由于您在char[]堆栈上分配数组,因此它不能是NULL. h将始终指向内存中的有效位置,因此您的检查必须失败。

如果你想在没有数据的情况下初始化你的数组,你应该使用

char h[256] = {'\0'};

'\0'是不一样的NUL字符NULL

于 2012-05-15T14:55:12.660 回答
1

那是因为您的条件是if(h != NULL)这意味着您实际上正在比较h肯定不会的地址NULL。如果是这样if(*h != NULL),第一种和第三种情况肯定会执行else部分。从第二部分开始,它将在 h[0] 处包含一些垃圾值,因此如果它是0,它会偶然执行else部分。

于 2012-05-15T14:55:36.187 回答
1

定义

char h[256]

表示h是一个数组。数组不能为NULL。数组是内存中存储一​​系列值的区域。

您以某种方式将h指针混淆了。

即使是指针,指针的值与所指向的事物的值也不相同。

于 2012-05-15T14:57:08.417 回答
1

代替

if(h!=NULL)

你为什么不使用

if(h[0]!=NULL)

当您将数组的第一个元素初始化为空时,而不是数组本身!为了确保元素为空,请使用

for(i=0; i<h.length ; i++)
 h[i]=NULL;

或使用 '\0' 而不是 NULL

至于为什么 h 不为 NULL 尝试在 java 中打印 h,下面会返回一个 @....... 值,这基本上是变量指向的位置。(不为空!)

System.out.println(c);

(很久没用c了,不知道能不能用c做类似的事情)

于 2012-05-15T15:00:29.470 回答