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

DDD
Lepaskan: 2024-11-01 03:03:02
asal
990 orang telah melayarinya

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>
Salin selepas log masuk

Output daripada kod ini ialah:

7 4
7 8
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk

Dalam kes ini, outputnya ialah:

7 4
7 8
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!