Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们能在g++;实施 我的朋友被派到他公司的一个现有的C++项目上工作。在源代码中,他看到了如下内容: char* tmp = "882.30"; char buff[32]; sprintf(buff, "%e", tmp); printf("TEST: %s\n", buff);_C++_G++_Printf - Fatal编程技术网

我们能在g++;实施 我的朋友被派到他公司的一个现有的C++项目上工作。在源代码中,他看到了如下内容: char* tmp = "882.30"; char buff[32]; sprintf(buff, "%e", tmp); printf("TEST: %s\n", buff);

我们能在g++;实施 我的朋友被派到他公司的一个现有的C++项目上工作。在源代码中,他看到了如下内容: char* tmp = "882.30"; char buff[32]; sprintf(buff, "%e", tmp); printf("TEST: %s\n", buff);,c++,g++,printf,C++,G++,Printf,编译时,引发了一个警告:警告:格式“%e”要求类型为“double”,但参数3的类型为“char*”但输出令人惊讶:8.823000e+002。他很好奇。怎么可能呢 为了澄清这一点,他创建了一个新的小项目,并使用了上述相同的代码段和相同的编译器,但结果却截然不同:2.647480e-314 环境:Centos 5.x,gcc 4.4.7 这里的原因是什么?现有项目具有sprintf或编译器的重载功能?您需要atof将char*指针显式转换为double #include <cstdio&g

编译时,引发了一个警告:
警告:格式“%e”要求类型为“double”,但参数3的类型为“char*”
但输出令人惊讶:
8.823000e+002
。他很好奇。怎么可能呢

为了澄清这一点,他创建了一个新的小项目,并使用了上述相同的代码段和相同的编译器,但结果却截然不同:
2.647480e-314

环境:Centos 5.x,gcc 4.4.7


这里的原因是什么?现有项目具有sprintf或编译器的重载功能?

您需要
atof
char*
指针显式转换为
double

#include <cstdio>
#include <cstdlib>

int main( void )
{
    const char* tmp = "882.30";
    char buff[32];
    sprintf(buff, "%e", atof( tmp )); 
    printf("TEST: %s\n", buff);
    return 0;
}
#包括
#包括
内部主(空)
{
const char*tmp=“882.30”;
字符buff[32];
sprintf(buff,“%e”,atof(tmp));
printf(“测试:%s\n”,buff);
返回0;
}
顺便说一句,您不能重写现有函数,因为这违反了
一个定义规则(ODR.)是未定义的行为

C99§7.19.6.1/9

如果任何参数不是相应的 转换规范,行为未定义


这意味着你肯定会得到不受欢迎的结果/行为。

我知道。你误解了我为什么问这个问题。是的,我更新了我的答案。哪个是
8.823000e+002
的环境?环境:Centos 5.x,gcc 4.4.7。?是。Centos 5.x,gcc 4.4.7