0

我无法理解 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”字符,但即使我尝试使用该语法它也会失败。谁能解释一下?

4

2 回答 2

1

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

msg[6]等于*(msg + 6),不是msg + 6

此外,您不能将 a 传递const char*给函数,而它需要 a char*。即,您还必须更新函数签名。

于 2015-02-08T19:34:56.410 回答
0

msg + 6不一样msg[6].

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

手册页引用,puts()语法是

int puts(const char *s);

所以, 的论点puts()需要是 a const char *,而不是 a char

于 2015-02-08T19:29:26.613 回答