2015-02-08 102 views
0

我很難理解c使用puts()來顯示消息的各個部分。我認爲兩種方法與功能不一樣。例如puts()const char的問題

void skippie(char *msg) 
{ 
    puts(msg + 6); 
} 

char *msg = "Don't call me!"; 
skippie(msg); 

編譯沒有問題,然而,這並不

void skippie(char *msg) 
{ 
    puts(msg[6]); 
} 

char *msg = "Don't call me!"; 
skippie(msg); 

怎麼放()兩種,只有編譯一個區別?編譯器抱怨說它需要一個「const」字符,但即使我嘗試使用該語法也會失敗。任何人都可以解釋嗎?

+4

'msg [6]'與'*(msg + 6)'相同​​...... – 2015-02-08 19:28:40

回答

1

索引操作員也取消引用指針,所以

msg[6]相當於*(msg + 6),不msg + 6

此外,您不能將const char*傳遞給一個函數,而它期望char*。即,您還必須更新功能簽名。

0

msg + 6是不一樣的msg[6].

根據你的代碼,msg+6char *,而msg[6]表示char

puts()man page引用,語法是

int puts(const char *s); 

左右,puts()需要的參數是一個const char *,而不是一個char