2012-03-07 30 views
6

Xin lỗi nếu đây là một câu hỏi siêu dễ dàng, nhưng tôi rất mới với C. Tôi muốn có thể cast char * s thành đôi và ints và dường như không thể tìm thấy một lời giải thích như thế nào.Làm thế nào để bạn cast một char * thành int hoặc double trong C

Chỉnh sửa: Tôi đọc trong đầu vào của người dùng, là một ký tự *. Một nửa số đầu vào tôi muốn chuyển đổi từ, ví dụ: "23" thành 23 và một nửa từ, ví dụ: "23.4" thành 23.4.

+0

Bạn có nghĩa là truyền hoặc chuyển đổi? Nói cách khác, bạn muốn chuyển đổi '" 42 "' thành số '42' hoặc xử lý bộ nhớ' char * 'trỏ tới thành' int' – JaredPar

+0

Mã làm việc về cách sử dụng 'strtol()' có thể được tìm thấy [ở đây] (http://stackoverflow.com/a/2729534/50049), tôi đóng cửa này quá cục bộ vì bạn không hoàn toàn chắc chắn về vấn đề bạn đang gặp phải. –

Trả lời

2

Nói đúng, bạn có thể làm điều này: (int) con trỏ.

Tuy nhiên, có thể bạn đang tìm kiếm các hàm atoi và atof.

atoi là một hàm chuyển đổi một char * trỏ đến một chuỗi chứa số nguyên theo dạng thập phân thành số nguyên.

atof cũng tương tự như vậy để tăng gấp đôi.

+2

Họ 'strtol()' của các hàm được đề xuất trên 'atoi()', nếu chỉ vì 'atoi()' trả về cùng một điều khi nó thất bại và khi nó phân tích thành công '0'. –

+1

'atoi()' không kiểm tra lỗi nào. 'strtol()' xử lý các lỗi, thiết lập các errnos có ý nghĩa và thậm chí cả các bản sao rác được tìm thấy trong đầu vào để kiểm tra sau này. –

+0

Đúng, nhưng atoi gần với tương đương với chuỗi ký tự thành số nguyên trong các ngôn ngữ cấp cao hơn. – Joshua

13

Bạn có thể đúc một char* như thế này:

char *c = "123.45"; 
int i = (int) c;  // cast to int 
double d = (double) c; // cast to double 

Nhưng điều đó sẽ cho kết quả vô nghĩa. Nó chỉ ép buộc con trỏ được coi là số nguyên hoặc gấp đôi.

Tôi đoán bạn muốn gì là phân tích (thay vì truyền) văn bản thành một số int hoặc double. Hãy thử điều này:

char *c = "123.45"; 
int i = atoi(c); 
double d = atof(c); 
+0

Cảm ơn bạn! Đây chính là điều tôi muốn! – user1231120

+2

(chỉ nói như một người dùng ở đây, không phải là một mod) 'atoi()' không an toàn. –

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