Keluaran Berbeza dalam Pengiraan Panjang Rentetan dan Saiz untuk Permulaan Rentetan Berasaskan Penunjuk dan Tatasusunan
Memahami Keputusan
Apabila mencipta rentetan berasaskan penunjuk str1 dan rentetan berasaskan tatasusunan str2 dengan nilai yang sama, fungsi strlen dan saiz menghasilkan hasil yang berbeza. Khususnya, untuk pengisytiharan:
<code class="c">char *str1 = "Sanjeev"; char str2[] = "Sanjeev";</code>
strlen mengembalikan 7 untuk kedua-dua str1 dan str2 kerana ia mengukur panjang jujukan aksara, tidak termasuk penamat nol ( ) pada penghujungnya.
Walau bagaimanapun, sizeof menghasilkan nilai yang berbeza:
Perbezaan Asas : Jenis Data berbanding Peruntukan Memori
sizeof mengukur saiz jenis data, manakala strlen mengukur panjang jujukan aksara. Dalam kes str1, ia adalah penunjuk kepada char, jadi sizeof mengembalikan saiz penunjuk. Untuk str2, ia ialah tatasusunan aksara, jadi sizeof mengembalikan saiz keseluruhan tatasusunan, termasuk null-terminator.
Pandangan Lebih Dekat
Untuk menunjukkan perbezaan yang lebih baik, pertimbangkan:
<code class="c">char str2[8]; strncpy(str2, "Sanjeev", 7); char *str1 = str2;</code>
Sekarang, kedua-dua str1 dan str2 menghala ke tatasusunan yang sama. Nilai strlennya ialah 7, tetapi saiz nilainya berbeza:
Ini menunjukkan bagaimana penilaian saiz bergantung pada struktur data asas.
Atas ialah kandungan terperinci Mengapakah `strlen` dan `sizeof` menghasilkan hasil yang berbeza untuk rentetan berasaskan penunjuk dan berasaskan tatasusunan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!