Rumah >pembangunan bahagian belakang >C++ >Menetapkan rentetan dalam C

Menetapkan rentetan dalam C

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-26 08:03:091017semak imbas

Teks yang disediakan menerangkan perbezaan antara menggunakan penunjuk aksara (char *string) dan tatasusunan aksara (char string[]) untuk menyimpan dan mengubah suai rentetan dalam C. Mari kita frasa semula untuk kejelasan dan aliran yang dipertingkatkan:

Contoh kod C menunjukkan perbezaan penting antara penunjuk dan tatasusunan, selalunya menjadi punca kekeliruan untuk pemula. Pertimbangkan coretan ini:

Assigning strings in C

Contoh 1 (Kesalahan Segmentasi):

<code class="language-c">#include <stdio.h>
int main(void) {
    char *string = "Wello, world!"; // string is a pointer
    string[0] = 'H';              // Attempting to modify a read-only string
    puts(string);
}</code>

Kod ini mengakibatkan kesalahan pembahagian. kenapa? Kerana string diisytiharkan sebagai penunjuk kepada watak. Penunjuk ini dimulakan untuk menunjuk kepada rentetan literal ("Hello, world!"), yang biasanya disimpan dalam ingatan baca sahaja. Percubaan untuk mengubah suai kandungan memori baca sahaja ini menyebabkan kerosakan pembahagian (pelanggaran akses memori).

Contoh 2 (Pengubahsuaian Berjaya):

<code class="language-c">#include <stdio.h>
int main(void) {
    char string[] = "Wello, world!"; // string is an array
    string[0] = 'H';              // Modifying a writable copy of the string
    puts(string);
}</code>

Kod ini berjaya mencetak "Hello, dunia!". Di sini, string diisytiharkan sebagai tatasusunan aksara. Pengkompil memperuntukkan ruang pada timbunan untuk memegang salinan rentetan literal. Salinan ini boleh ditulis, membenarkan pengubahsuaian string[0] tanpa menyebabkan ralat.

Perbezaan Utama:

Perbezaan asas terletak pada cara rentetan disimpan. Dalam Contoh 1, rentetan literal berada dalam ingatan baca sahaja, dan penunjuk hanya menunjuk kepadanya. Dalam Contoh 2, salinan rentetan literal yang boleh ditulis dibuat dan disimpan dalam tatasusunan pada tindanan.

Kesimpulan:

Penunjuk dan tatasusunan ialah jenis data yang berbeza dalam C. Walaupun ia mungkin kelihatan serupa dalam beberapa konteks, gelagatnya boleh berbeza dengan ketara, terutamanya apabila berurusan dengan literal rentetan. Sentiasa ambil perhatian tentang perbezaan ini untuk mengelakkan ralat yang tidak dijangka dan ralat pembahagian. Menggunakan tatasusunan aksara untuk rentetan yang boleh diubah suai biasanya lebih selamat daripada menggunakan penuding aksara kepada literal rentetan.

Atas ialah kandungan terperinci Menetapkan rentetan 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