Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `strlen` dan `sizeof` Menghasilkan Output Berbeza untuk Penunjuk dan Tatasusunan dalam C?
Output Berbeza daripada Strlen dan Sizedof Kerana Permulaan Penunjuk dan Tatasusunan
Dalam pengaturcaraan C, fungsi sizeof dan strlen menyediakan maklumat tentang saiz dan panjang jenis data, masing-masing. Walau bagaimanapun, apabila berurusan dengan penunjuk dan tatasusunan, output fungsi ini boleh berbeza, yang membawa kepada kekeliruan.
Pertimbangkan contoh berikut:
<code class="c">char *str1 = "Sanjeev"; char str2[] = "Sanjeev"; printf("%d %d\n", strlen(str1), sizeof(str1)); printf("%d %d\n", strlen(str2), sizeof(str2));</code>
Output daripada kod ini ialah:
7 4 7 8
Penjelasan:
Untuk menjelaskan lagi perbezaannya, pertimbangkan pengubahsuaian berikut pada kod:
<code class="c">char str2[8]; strncpy(str2, "Sanjeev", 7); char *str1 = str2; printf("%d %d\n", strlen(str1), sizeof(str1)); printf("%d %d\n", strlen(str2), sizeof(str2));</code>
Dalam kes ini, outputnya ialah:
7 4 7 8
Walaupun kedua-dua str1 dan str2 merujuk kepada rentetan yang sama sekarang, sizeof(str1) masih mengembalikan saiz penunjuk. Ini kerana str1 ialah penunjuk yang menunjuk kepada elemen pertama tatasusunan, manakala str2 ialah tatasusunan aksara.
Atas ialah kandungan terperinci Mengapakah `strlen` dan `sizeof` Menghasilkan Output Berbeza untuk Penunjuk dan Tatasusunan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!