質問するログイン新規登録

回答編集履歴

1

追記のため

2018/12/25 10:24

投稿

myoon
myoon

スコア100

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