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 + 6
与 msg[6].
不同
根据您的代码,msg+6
是 char *
,而 msg[6]
代表 char
。
引用puts()
的man page,语法为
int puts(const char *s);
所以,puts()
的参数需要是 const char *
,而不是 char
。
索引运算符也取消引用指针,所以
msg[6]
等同于 *(msg + 6)
,而不是 msg + 6
。
此外,您不能将 const char*
传递给函数,而它需要 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 + 6
与 msg[6].
根据您的代码,msg+6
是 char *
,而 msg[6]
代表 char
。
引用puts()
的man page,语法为
int puts(const char *s);
所以,puts()
的参数需要是 const char *
,而不是 char
。
索引运算符也取消引用指针,所以
msg[6]
等同于 *(msg + 6)
,而不是 msg + 6
。
此外,您不能将 const char*
传递给函数,而它需要 char*
。即,您还必须更新函数签名。