在sprintf中添加错误的格式类型

时间:2016-05-18 14:09:59

标签: c++

我对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;
}

2 个答案:

答案 0 :(得分:2)

因为除非你提供适当的参数,否则函数不知道你发送的是什么类型。

根据定义,Variadic函数没有任何未定义参数的类型信息,并且必须自己确定从给定数据中获取什么。

答案 1 :(得分:2)

sprintf函数有一个varargs参数列表 编译器通常不解析第二个参数(格式字符串)以确定连续参数的类型 因此无法进行隐式转换。