2015-02-08 80 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