使用const char来提出问题

时间:2015-02-08 19:27:24

标签: c pointers puts

我无法理解c如何使用puts()来显示消息的各个部分。我认为等效的两种方法与函数的工作方式不同。例如

 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);

puts()如何区分两者并且只编译一个?编译器抱怨它想要一个" const" char,但即使我尝试使用该语法也失败了。有谁能解释一下?

2 个答案:

答案 0 :(得分:1)

索引运算符也取消引用指针,所以

msg[6]相当于*(msg + 6),而不是msg + 6

此外,您无法将const char*传递给函数,而期望char*。即,您还必须更新功能签名。

答案 1 :(得分:0)

msg + 6msg[6].

不同

根据您的代码,msg+6char *,而msg[6]代表char

puts()的{​​{3}}引用,语法为

int puts(const char *s);

所以,puts()的论点必须是const char *,而不是char