【问题标题】:format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’格式“%s”需要“char *”类型的参数,但参数 2 的类型为“int”
【发布时间】:2017-12-10 17:18:28
【问题描述】:

所以我刚开始用 C 编写代码。我正在编写这个自定义挤压函数,但我遇到了一个我无法解释的错误。目标是从代码中取出字母“c”。当我尝试编译时,我收到标题中提供的警告。 '**argv' 是如何变成 'int' 的?

void main(int argc, char **argv)
{
int i,j;
for(i=j=0; argv[1][i] != '\0'; i++)
    if(argv[1][i] != 'c')
        argv[1][j++] = argv[1][i];
argv[1][j] = '\0';
for(i=0; argv[1][i] != '\0'; i++)
    printf("%s", argv[1][i]);
}

【问题讨论】:

  • 如果目标是获取“字母”,为什么要使用%s 格式,它适用于字符串,而不适用于单个字母?

标签: c


【解决方案1】:

改一下

printf("%s", argv[1][i]);

到

printf("%c", argv[1][i]);

或更好,删除最后一个:

 printf("%s", argv[1]);

【讨论】:

    【解决方案2】:

    **argv 是char。但是,当您将char 值作为... 参数之一(例如printf)传递给可变参数函数时,它会自动转换为int。这就是**argv 变成int 的方式。

    无论如何%s 并不适合打印单个字母。显然,您想打印一个 char。这是使用%c 格式完成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 2021-01-26
      • 2013-05-10
      相关资源
      最近更新 更多