Apabila menggunakan printf atau fprintf untuk pemformatan integer perpuluhan (%d, %u, %ld, %lld) , adalah penting untuk memastikan bahawa format yang ditentukan sepadan dengan jenis data yang sedang diformatkan. Jika tidak, tingkah laku yang tidak ditentukan boleh berlaku.
Mentakrifkan tingkah laku yang tidak ditentukan dalam pengaturcaraan adalah mencabar, kerana ia merangkumi pelbagai kemungkinan akibat, termasuk:
Pertimbangkan coretan kod berikut:
#include <stdio.h> int main() { long a = 10; long b = 20; printf("%d, %d\n", a, b); }
Pada seni bina 32-bit, hasilnya adalah seperti yang dijangkakan: "10, 20". Walau bagaimanapun, pada seni bina 64-bit, output berubah kepada "10, 2097152".
Anomali ini adalah kerana printf mentafsir penentu format '%d' sebagai pemegang tempat jenis int, iaitu 32 bit pada Seni bina 32-bit. Tetapi pada seni bina 64-bit, int ialah 64 bit, mengakibatkan penukaran yang salah untuk nilai yang panjang.
Penggunaan rentetan format yang salah boleh membawa akibat yang teruk:
Atas ialah kandungan terperinci Mengapa Format Rentetan yang Salah dalam printf/fprintf Boleh Membawa kepada Gelagat Tidak Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!