【发布时间】:2017-12-20 09:57:07
【问题描述】:
我正在尝试重新编程 printf 函数(大学项目),但 %f 给我带来了问题。 我像这样使用函数指针:
void (*fct[15])(void*) =
{printfs, printfc, printfd, printfd, printfl, printfx, printfX,
printfo, printfb, printfS, printfu, printfp, printff};
当使用正确的标志时,这些函数之一被调用。 一个典型的 printfd 将接收一个 void* 变量作为参数并且会这样做:
int nbr = (int)var; //var is a void* type variable
my_put_nbr(var); //handmade function wich displays numbers
问题是,出于某种奇怪的原因,当我对 printff 执行相同操作时,它不起作用
float nbr = (float)var;
我收到消息
错误:指针值在预期的浮点值处使用 float nbr = (float)var
我也尝试过这样的事情。如果我有
my_printf("%f", var); //with var = 12.34
然后我调用应该执行的函数 printff():
int nbr1 = (int)(var / 1);
int nbr2 = (int)(var % 1);
所以我通常会有 nbr1 = 12 和 nbr2 = 34,然后我会在两者之间显示“。”但它仍然不起作用,我收到消息:
错误:二进制 * 的无效操作数(具有“void *”和“int”)int nbr1 = (int)(var*1)
我不知道,所以如果你有任何线索,请告诉我。 另外,我不能使用 printf() 之类的命令,这是本练习的规则,所以不要告诉我解决方案隐藏在这里。
【问题讨论】:
-
您需要添加一个minimal reproducible example,因为到目前为止确实没有足够的代码来了解您在做什么。虽然猜测,看起来你应该研究变量参数列表。
-
您正在尝试将指针大小写为正常值!
-
顺便说一句,类似 printf 的函数永远永远不会获得浮点数。只有双。请注意,在标准库 printf 中,
%f需要一个双参数。浮点数没有输出格式规范,你有没有想过为什么? -
不要尝试在评论中粘贴您的代码 - 编辑您的问题!
-
您对 va_arg 的使用不正确并导致未定义的行为。你必须重新设计你的整个方法。它似乎适用于您计算机上的单个
int参数这一事实纯属意外,也是不幸的,因为它导致您在死胡同上浪费了很多时间。
标签: c pointers variable-assignment