无效指针强制转换为long double会产生垃圾

时间:2015-03-23 21:37:34

标签: c pointers void-pointers

我已经创建了一个使用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,在这种情况下它会给出一个垃圾值。为什么会这样?

其次,这是处理指针保存数据类型可以是什么的最佳方法吗?

1 个答案:

答案 0 :(得分:2)

long double的正确格式说明符为%Lf(大写L),而不是%lf

printf("long double %Lf", *(long double*)ptr);
//                   ^ here