2012-02-21 10 views
5

次のコードを実行しようとすると、segフォルトが発生します。私はgdbで実行しようとしましたが、エラーはprintfの呼び出しの一部として発生していることを理解していますが、なぜそれが正しく機能していないのか分かりません。printfにchar配列へのポインタを与えるとプログラムがクラッシュする

#include <stdlib.h> 
#include <stdio.h> 

int main() { 
    char c[5] = "Test"; 
    char *type = NULL; 

    type = &c[0]; 
    printf("%s\n", *type); 
} 

私はprintf("%s\n", c);printf("%s\n", *type); を交換した場合、私は私が期待通りに印刷された「テスト」を取得します。 char配列へのポインタではうまくいかないのはなぜですか?

+2

私はちょうどニットをしたいと思います:Cはプログラムではないので "C"はクラッシュしませんでした。あなたのコンパイラはクラッシュしませんでした。 ***あなたはクラッシュするプログラムを書くためにCを使いました*** –

+1

あなたは正しいです。私は何を言おうとしていたのか分かりますが、明らかにあなたもそうですが、これらのことについて話し合うときには正確であることが重要です。 – WhiteHotLoveTiger

+0

あなたの '%s'を'%c'に変更して 'c [0]'を見てください。 – wulfgarpro

答えて

15

charprintfは、逆参照しようとしています。代わりにこれを試してみてください:

printf("%s\n", type); 
      ^

あなたが*typeを渡すと、それは「私は場所Tの文字列を持っている」printfを伝えるようなものです。

type = &c[0]は、誤解を招くようなものです。なぜあなただ​​けではない:

type = c; 
+0

きれいな説明をありがとう。私がポインタのハングを取得していると思ったときに、私はそれらをもう少し見直す必要があることを理解しています。 – WhiteHotLoveTiger

5

typeを参照しないでください。それはポインタのままでなければなりません。

4

printftypeの逆参照を削除してください。

関連する問題