2015-04-22 19 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; 
} 

Mã tôi đã viết ở trên phải in 1.25, nhưng theo codepad (trình biên dịch C trực tuyến), nó không in 1.25. Trên bảng mã, nó in 2097152.000000. Đây là số codepad linkTại sao strtof không in nổi phù hợp?

Tôi đã làm gì sai ở đây?

+4

Bản in sẽ làm gì? Tôi nhận được [1.250000] (http://ideone.com/Rs0Aru) trên ideone –

+0

http://codepad.org/ không in 1.25 khi mã ở trên được biên dịch và chạy –

+2

Vì vậy, bạn nhận được kết quả đầu ra nào? –

Trả lời

5

codepad có phiên bản cũ của gcc và có lẽ là thư viện C chuẩn. Rõ ràng, strtof không được khai báo bởi các tệp tiêu đề mà bạn đưa vào. (strtof đã được thêm vào C99.)

Hãy thử sử dụng dịch vụ trực tuyến có phiên bản gcc hậu kỳ. Hoặc một cách rõ ràng thêm việc kê khai chính xác:

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

gì xảy ra là nếu không có sự tuyên bố, giá trị mặc định trình biên dịch các kiểu trả về của hàm để int. Vì hàm thực sự trả về một float, float được hiểu là (không được chuyển đổi thành) một số nguyên, và sau đó số nguyên đó được chuyển thành một phao.

Không cảnh báo nào được tạo ra, có lẽ vì -Wall không có trong các tùy chọn trình biên dịch và/hoặc tiêu chuẩn C được sử dụng cho phép sử dụng các hàm không được khai báo.

+0

Từ [tại đây] (http://codepad.org/about), có vẻ như codepad sử dụng gcc 4.1.2 –

+0

@ ArunA.S: Vâng. Bạn có nghĩ tôi phóng đại quá nhiều không? Đó là tám tuổi. – rici

Các vấn đề liên quan