我已经创建了一个使用void指针的基本函数,然后根据其类型处理输入。
#include <stdio.h>
int writeVal (int id, void *ptr, int byteSize)
{
printf ("size is %d" , byteSize);
if (byteSize == sizeof(int))
{
printf("int %d", *(int*)ptr);
}
if (byteSize == sizeof(float))
{
printf("float %f", *(float*)ptr);
}
if (byteSize == sizeof(double))
{
printf("double %lf", *(double*)ptr);
}
if (byteSize == sizeof(long double))
{
printf("long double %lf", *(long double*)ptr);
}
else
{
printf ("Unknown Type");
return 1;
}
return 0;
}
int main(void) {
// your code goes here
long double i=30.0;
long double *ff=&i;
int ret=writeVal(10, ff,sizeof(*ff));
return 0;
}
这适用于所有值,除非我传递一个long double,在这种情况下它会给出一个垃圾值。为什么会这样?
其次,这是处理指针保存数据类型可以是什么的最佳方法吗?
答案 0 :(得分:2)
long double
的正确格式说明符为%Lf
(大写L),而不是%lf
。
printf("long double %Lf", *(long double*)ptr);
// ^ here