回答編集履歴
1
追記のため
test
CHANGED
@@ -2,8 +2,10 @@
|
|
2
2
|
|
3
3
|
ナルポインタにアクセスした場合、C言語では何が起こるかわかりません。
|
4
4
|
|
5
|
-
たまたま、質問者様のコンパイラでは、printf の %s に対応する文字列(文字へのポインタ)がナルポインタの場合 (null) と表示し、%p では (nil) と表示する親切設計だったのでしょう。これは別にそう決められてるわけではないです。
|
5
|
+
たまたま、質問者様のコンパイラでは、printf の %s に対応する文字列(文字へのポインタ)がナルポインタの場合 (null) と表示し、%p では (nil) と表示する親切設計だったのでしょう。これは別にC言語仕様で(あるいはprintf関数仕様で)そう決められてるわけではないです。
|
6
6
|
|
7
|
-
emploee->name はemploee と同じアドレスになるので、(null) が出たが、何らかの理由で
|
7
|
+
emploee->name はemploee と同じアドレスになるので、(null) が出たが、書き換えたら何らかの理由で親切機構が働かずに「ヌルポインタにアクセスした」という形になってセグメントフォールトになったのでしょうが、私にはその違いは分かりません。
|
8
8
|
|
9
9
|
ヌルポインタにアクセスしたら何が起こるか分からないので、何が起こっても文句は言えないということです。
|
10
|
+
|
11
|
+
ちなみに printf("%s",str) で、strが長さ0の文字列""の場合(strはナルポインタではないことに注意)は動作が決まってます。
|