一个简单的程序
#include<stdio.h>
int main() {
char b='a';
printf("%s \n", b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
test.c: In function ‘main’:
test.c:4:1: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
printf("%s \n", b);
^
Run Code Online (Sandbox Code Playgroud)
但第二个arg char不是int.
这是编译器的错误警告,还是我遗漏的其他东西?
编译器肯定是正确的警告呼叫.printf使用"%s"说明符需要一个类型的参数char*(必须指向一个字符串),并且您传递的参数不是该类型的参数.
至于警告信息引用的原因int而不是char,因为它printf是一个可变函数.第一个参数(格式字符串)声明为类型const char*,但以下参数仅指定为, ....在这种特殊情况下,整数类型窄的参数比int被提升到int或unsigned int.因此,即使表达式b是类型char,传递给的实际参数printf也是类型int; 具体地,它的转换的值的结果b,从char到int.
| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |