gpt4 book ai didi

c - strtod 如何转换我的参数?

转载 作者:行者123 更新时间:2023-11-30 16:59:56 27 4
gpt4 key购买 nike

我有一个有趣的程序,我想给出一个参数,以便它将触发最后一个 else 条件来执行 sh 实用程序。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


#define answer 3.141593

void main(int argc, char **argv) {

float a = (argc - 2)?: strtod(argv[1], 0);

printf("You provided the number %f which is too ", a);

if(a < answer)
puts("low");
else if(a > answer)
puts("high");
else
execl("/bin/sh", "sh", "-p", NULL);
}

我可以做到这一点的一种方法是将 NAN 作为参数。但是,我不明白为什么给出 3.141593 作为参数不会转换为与“answer”变量相同的值。

有人写了一篇关于它的博文,解释如下: http://blog.pkt5.com/2012/09/iosmashthestack-level02alt.html

“这是因为 strtod 的转换会将我们输入的 3.141593 转换为 double 3.14159298。因此它总是太低”

为什么 3.141593 会转换为 3.14159298?

最佳答案

这里的问题是 float 无法表示 double 可以表示的所有值。考虑这个例子:

double a = 3.141593;
float b = a;
double c = b;

c 等于 a 吗?答案是否定的,因为中间步骤中存在精度损失,其中值被截断以适合 float

关于c - strtod 如何转换我的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37909771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com