Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `strlen` dan `sizeof` memberikan hasil yang berbeza untuk pemulaan rentetan penunjuk dan tatasusunan dalam C?
Dalam pengaturcaraan C, penggunaan penunjuk dan tatasusunan untuk memulakan rentetan boleh membawa kepada jurang yang tidak dijangka dalam output strlen dan sizeof. Mari kita analisa fenomena ini dengan meneliti contoh khusus.
Coretan kod yang disediakan:
<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>
menghasilkan output berikut:
7 4 7 8
Variasi timbul disebabkan oleh perbezaan asas antara penunjuk dan tatasusunan dalam jenis data dan saiz objeknya.
Penunjuk (str1)
Array (str2)
Untuk menggambarkan konsep ini dengan lebih lanjut, mari kita ubah suai kod sedikit:
<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>
Kod ini akan menghasilkan keputusan yang sama untuk kedua-dua str1 dan str2 dari segi strlen: 7. Walau bagaimanapun, sizeof(str1) akan kekal 4, mewakili alamat memori, manakala sizeof(str2) akan melaraskan kepada 8, masih mengambil kira aksara yang ditamatkan nol.
Oleh itu, perkara penting ialah memahami jenis data yang berbeza dan ciri saiz penunjuk dan tatasusunan apabila bekerja dengan rentetan dalam pengaturcaraan C.
Atas ialah kandungan terperinci Mengapakah `strlen` dan `sizeof` memberikan hasil yang berbeza untuk pemulaan rentetan penunjuk dan tatasusunan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!