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* hNULL はありません。なぜそうなのですか?私はそこに何も保存していないので、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 h[256]

hが配列であることを意味します。配列をNULLにすることはできません。配列は、値のシーケンスを格納するメモリ内の領域です。

あなたはどういうわけかhポインタを混同しています。

それがポインタであったとしても、ポインタの値は、ポイントされたものの値と同じではありませ

于 2012-05-15T14:57:08.417 に答える
1

char[]スタックに配列を割り当てているため、それはできませんNULLh常にメモリ内の有効な場所を指すため、チェック失敗する必要があります。

データなしで配列を初期化する場合は、使用する必要があります

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

'\0'NUL同じではない文字ですNULL

于 2012-05-15T14:55:12.660 に答える
1

それは、あなたの状態がif(h != NULL)実際にアドレスを比較していることを意味するhためですNULL。もしそうならif(*h != NULL)、1番目と3番目のケースは間違いなくelse一部を実行します。2番目の部分の時点で、h [0]にガベージ値が含まれているため、偶然その場合、部分0を実行elseします。

于 2012-05-15T14:55:36.187 に答える
1

それ以外の

if(h!=NULL)

使わない理由

if(h[0]!=NULL)

配列自体ではなく、配列の最初の要素を null として初期化しているためです。要素が null であることを確認するには

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

または、NULL の代わりに '\0' を使用します

h が NULL ではない理由については、Java で h を出力してみてください。次の例では @....... 値が返されます。これは、基本的に変数が指している場所です。(ヌルじゃない!)

System.out.println(c);

(c を使用してから長いので、c で同様のことができるかどうかはわかりません)

于 2012-05-15T15:00:29.470 に答える