我对sprintf中使用了错误的格式字符串时有些怀疑。让我们说例如%f用作整数的格式说明符。为什么不进行隐式转换? 请考虑以下计划。
#include <stdio.h>
#include <string>
using namespace std;
int main()
{
int i = 0;
char temp[50];int a = 1;
sprintf( temp, "%f",a);
puts(temp);
return 1;
}
答案 0 :(得分:2)
因为除非你提供适当的参数,否则函数不知道你发送的是什么类型。
根据定义,Variadic函数没有任何未定义参数的类型信息,并且必须自己确定从给定数据中获取什么。
答案 1 :(得分:2)
sprintf
函数有一个varargs参数列表
编译器通常不解析第二个参数(格式字符串)以确定连续参数的类型
因此无法进行隐式转换。