MW211 EXIT

devlog
C言語/NULLポインタと文字長ゼロの文字列の違い
2013年04月02日
NULLポインタを引数に入れると例外を引き起こすものでも
文字長ゼロの文字列を入れても例外とならない場合もある。

この二つの区別はなかなかつきづらい。
以下に例をまとめてみたが、実際はこんなに単純ではなく、
ポインタ(アドレス)を引き継いだりして複雑だったりする。

NULLポインタの例。
┌──────────────────────────────────────┐
│// NULLのアドレスを取得した                                                 │
│char*  str = NULL;                                                          │
└──────────────────────────────────────┘

文字長ゼロの文字列(空文字)の例。
┌──────────────────────────────────────┐
│// 空文字の文字列リテラルのアドレスを取得した                               │
│char*  str = "";                                                            │
├──────────────────────────────────────┤
│// NULL(0)で全初期化した                                                    │
│char  str[16];                                                              │
│memset(str, 0, sizeof(str));                                                │
├──────────────────────────────────────┤
│// 先頭をNULL(\0)とした                                                     │
│char  str[16];                                                              │
│str[0] = '\0';                                                              │
└──────────────────────────────────────┘
分類:C/C++