Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `strlen` dan `sizeof` Menghasilkan Output Berbeza untuk Penunjuk dan Tatasusunan dalam C?

Mengapakah `strlen` dan `sizeof` Menghasilkan Output Berbeza untuk Penunjuk dan Tatasusunan dalam C?

DDD
DDDasal
2024-11-01 03:03:02995semak imbas

Why Do `strlen` and `sizeof` Produce Different Outputs for Pointers and Arrays in 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:

  • Str1 (Permulaan Penunjuk): str1 dimulakan sebagai penuding kepada rentetan literal "Sanjeev." sizeof(str1) memberikan saiz penunjuk, iaitu 4 bait dalam kebanyakan seni bina. Sebaliknya, strlen(str1) mengembalikan panjang rentetan yang ditunjuk oleh str1, iaitu 7 (tidak termasuk penamat nol ' ').
  • Str2 (Permulaan Tatasusunan): str2 dimulakan sebagai tatasusunan aksara dengan panjang 8. sizeof(str2) memberikan saiz tatasusunan ini, termasuk penamat nol, iaitu 8 bait. Begitu juga, strlen(str2) mengembalikan panjang rentetan yang disimpan dalam tatasusunan, yang juga 7.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn