2015-04-22 107 views
5
#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爲什麼strtof不能打印正確的浮點數?

我在這裏做錯了什麼?

+4

它是什麼打印呢?我在ideone上得到了[1.250000](http://ideone.com/Rs0Aru) –

+0

http://codepad.org/當上面的代碼被編譯並運行時,不會打印出1.25的代碼 –

+2

那麼你會得到什麼輸出? –

回答

5

鍵盤有一箇舊版本的gcc,可能是標準的C庫。顯然,strtof沒有被你包含的頭文件聲明。 (在C99中添加了strtof。)

嘗試使用gcc的postdiluvian版本的在線服務。或明確添加正確的聲明:

float strtof(const char* ptr, char** end_ptr); 

發生的事情是,如果沒有聲明,則編譯器默認爲int返回類型的函數。由於該函數實際返回一個浮點數,浮點數被解釋爲(未轉換爲)整數,然後該整數轉換爲浮點數。

不會產生警告,大概是因爲-Wall不在編譯器選項中,和/或正在使用的C標準允許使用未聲明的函數。

+0

從[這裏](http://codepad.org/about)看來,鍵盤使用gcc 4.1.2 –

+0

@ ArunA.S:是的。你覺得我誇大了嗎?它已經八歲了。 – rici