puts() 问题与 const char

puts() questions with const char

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

msg + 6msg[6].

不同

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

引用puts()man page,语法为

int puts(const char *s);

所以,puts() 的参数需要是 const char *,而不是 char

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

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

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