Мне нужно зарегистрировать функцию печати для фрактальной части печати с плавающей точкой xxx.yy -> yy
Но это не работает так, как нужно.Я думаю, что это проблема с указателем, но я не могу понять, где проблема.
int print_fr (FILE *stream,const struct printf_info *info
,const void *const *args)
{
char *buffer;
const float ff = *((const float *) (args[0]));
printf("%f\n", ff); // if 123.45 -> -107374184.000000
double fract_part, int_part;
fract_part = modf(ff, &int_part);
int len = asprintf (&buffer, "%.0f",fract_part);
if (len == -1) return -1;
len = fprintf (stream, "%*s",
(info->left ? -info->width : info->width),
buffer);
free (buffer);
return len;
}
int print_fr_arginfo (const struct printf_info *info, size_t n
,int *argtypes)
{
if (n > 0)
argtypes[0] = PA_FLOAT;
return 1;
}
main.c
/* Register the print function */
register_printf_function ('w', print_ff, print_ff_arginfo);
printf("%w\n", 123.45); // result -0