【问题标题】:puts() questions with const charputs() 带有 const char 的问题
【发布时间】:2015-02-08 19:27:24
【问题描述】:

我无法理解 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)...

标签: c pointers puts


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    msg + 6msg[6].不一样

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

    引用puts()man page,语法为

    int puts(const char *s);
    

    所以,puts() 的参数必须是 const char *,而不是 char

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2020-09-19
      相关资源
      最近更新 更多