cuốn sách gpt4 ai đã làm

c - fprintf 和 difftime 疯狂

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:36:25 27 4
mua khóa gpt4 Nike

Đã tìm kiếm câu trả lời cho điều này nhưng không thể tìm thấy bất cứ điều gì. Gần nhất tôi có thể tìm thấy là difftime trả về 0 khi có sự khác biệt rõ ràngCó một lời giải thích hay ở đó, liên quan đến cách các tham số được chèn vào ngăn xếp và định dạng mong đợi, nhưng tôi nghĩ câu hỏi của tôi khác:

Tôi đã đưa ra một ví dụ đơn giản nhất có thể. Giả sử tôi có đoạn mã sau trong C:

time_t thời gian bắt đầu = thời gian(NULL)
một số chức năng();
time_t newtime = thời gian(NULL)

fprintf(stderr, "starttime %f và difftime %f\n", starttime, difftime(newtime, starttime));
fprintf(stderr, "difftime %f và starttime %f\n", difftime(newtime, starttime), starttime);
return 0;

somefunction là một hàm chạy trong 1 hoặc 2 giây. Đầu ra tôi nhận được là:

thời gian bắt đầu 2,000000 và thời gian khác biệt 0,000000
thời gian khác biệt 2,000000 và thời gian bắt đầu 0,000000

Tôi thậm chí không biết bắt đầu từ đâu với câu hỏi của mình. Tại sao giá trị đầu ra vẫn giữ nguyên khi tôi thay đổi thứ tự? Ngoài ra, tại sao một trong các giá trị là 0? Điều này giống nhau cho dù tôi sử dụng %f, %d, %lu, %llu, v.v. Có giải thích tham số ngăn xếp cho việc này không? Chính xác thì fprintf đang làm gì trong nội bộ?

Cảm ơn. Tôi đã lãng phí quá nhiều thời gian để gỡ lỗi này và tôi thực sự đánh giá cao sự giúp đỡ của bạn!

câu trả lời hay nhất

"%f" Trình xác định không áp dụng cho thời gian_t. Theo như tôi biết,thời gian_t Kiểu có thể là số nguyên hoặc số thực.

例如tiêu chuẩn POSIXChỉ nói:

thời gian_t and đồng hồ_t phải là kiểu số nguyên hoặc số thực.

Hãy thử điều này:

/* Có sai sót và sai sót */
printf("%f\n", (double)thời gian bắt đầu);

Tôi thấy ai đó đề nghị chuyển đổi nó thành uintmax_t,không dấu dài dài Chờ đợi. Rõ ràng câu trả lời thực sự là đây :

Không có cách thống nhất để printf() time_t, dấu chấm. Bạn không cần phải làm điều này - bạn thậm chí không cần biết nội bộ time_t là gì. Các lựa chọn thay thế được đề xuất bao gồm ctime() và strftime(). những thứ này để giữ cho mã di động.

Về sự điên rồ của c-fprintf và difftime, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/8456382/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress