#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char aaa[35] = "1.25";
char* bbb = &(aaa[0]);
char** ccc = &(bbb);
float a = strtof(*ccc, ccc);
printf("%f\n", a);
return 0;
}
我上面写的代码应该打印1.25
,但是根据键盘(在线C编译器),它不会打印1.25
。在键盘上,它打印2097152.000000
。这是codepad link
我在这里做错了什么?
答案 0 :(得分:5)
codepad有一个旧版本的gcc,可能是标准的C库。显然,您包含的头文件未声明strtof
。 (C99中添加了strtof
。)
尝试使用postdiluvian版本的gcc在线服务。或者明确添加正确的声明:
float strtof(const char* ptr, char** end_ptr);
发生的事情是,如果没有声明,编译器会将函数的返回类型默认为int
。由于函数实际返回一个浮点数,浮点数被解释为(不转换为)一个整数,然后该整数转换为浮点数。
不会产生警告,大概是因为-Wall不在编译器选项中,和/或正在使用的C标准允许使用未声明的函数。