2012-02-21 86 views
5

當我嘗試運行下面的代碼時,我得到一個seg故障。我試過通過gdb運行它,並且我明白這個錯誤是作爲調用printf的一部分而發生的,但是我爲什麼不能正常工作而丟失了。當我給printf一個指向字符數組的指針時,程序崩潰

#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

我只是想nitpick:「C」沒有崩潰,因爲C不是一個程序。你的編譯器沒有崩潰。 ***你用C寫了一個程序崩潰。*** – 2012-02-21 19:04:16

+1

你是對的David。我知道我想說什麼,顯然,你也這麼認爲,但是在討論這些事情時,準確地說明是很重要的。 – WhiteHotLoveTiger 2012-02-21 19:29:14

+0

將'%s'更改爲'%c'以查看'c [0]' – wulfgarpro 2016-06-21 22:44:29

回答

15

您正在傳遞一個普通的charprintf正試圖對其進行解引用。如果您通過*type就好像告訴printf「我得在位置T A字符串」

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

:試試這個。

type = &c[0]是一種誤導。你爲什麼不只是:

type = c; 
+0

感謝您的明確解釋。就在我認爲自己已經掌握了指針的時候,我意識到我需要再看看它們。 – WhiteHotLoveTiger 2012-02-21 19:26:42

5

不要取消type。它必須保持一個指針。

4

刪除type的廢除引用printf