Hàm strtod() chuyển chuỗi thành số thực double. Trả về số đã chuyển, hoặc 0 nếu thất bại. Khai báo trong <stdlib.h>.
Cú pháp
double strtod(const char *str, char **endptr);
Tham số:
- str – Chuỗi cần chuyển
- endptr – Con trỏ nhận địa chỉ ký tự đầu tiên không parse được (có thể NULL)
Ví dụ
#include <stdio.h>
#include <stdlib.h>
int main() {
char s[20] = "8.28 is a number";
char *endptr;
double result = strtod(s, &endptr);
printf("So sau chuyen doi: %lf\n", result);
printf("Ky tu dung lai: '%c'\n", *endptr);
return 0;
}
Kết quả
So sau chuyen doi: 8.280000
Ky tu dung lai: ' '
Giải thích: Parse 8.28 thành double. Dừng tại khoảng trắng. endptr trỏ đến khoảng trắng đó.
Kiểm tra lỗi
double val = strtod(str, &endptr);
if (endptr == str) {
// Khong parse duoc so nao
} else if (*endptr != '\0') {
// Co ky tu thua sau so
} else {
// Chuyen doi hoan toan thanh cong
}
Hàm liên quan:
strtof() (-> float), strtold() (-> long double), strtol()/strtoul() (-> long/unsigned long). C++17: std::from_chars nhanh hơn, không locale, không exception.