C Academy · Pelajaran

strlen, strcpy, strcat

Fungsi string teras

Pelajaran 1 daripada 413 langkah

strlen, strcpy, strcat ialah pelajaran C Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C Academy merangkumi sejumlah 4 pelajaran.

Rentetan dalam C

Dalam C, rentetan hanyalah tatasusunan char yang berakhir dengan aksara penamat nol khas '\0'.

Fungsi dalam <string.h> bergantung pada penamat ini untuk mengetahui tempat rentetan berakhir. Tanpanya, fungsi tersebut membaca melepasi hujung tatasusunan anda.

#include <stdio.h>

int main(void) {
    char name[] = "Alice";
    printf("%s\n", name);
    printf("Bytes used: %lu\n", sizeof(name));
    return 0;
}

Menyertakan string.h

Untuk menggunakan fungsi rentetan, anda mesti menyertakan pengepala:

  • #include <string.h>

Ini memberikan anda strlen, strcpy, strcat, strcmp dan banyak lagi.

#include <stdio.h>
#include <string.h>

int main(void) {
    char greeting[] = "Hello";
    printf("Length is %lu\n", strlen(greeting));
    return 0;
}

strlen: mengira aksara

strlen memulangkan bilangan aksara sebelum penamat nol. Ia tidak mengira '\0' itu sendiri.

Jadi strlen("cat") memulangkan 3, walaupun tatasusunan itu menyimpan 4 bait.

#include <stdio.h>
#include <string.h>

int main(void) {
    char word[] = "cat";
    printf("strlen = %lu\n", strlen(word));
    printf("sizeof = %lu\n", sizeof(word));
    return 0;
}

strlen ialah O(n)

Oleh sebab rentetan C tidak menyimpan panjang, strlen mesti melalui setiap aksara sehingga menemui '\0'.

Hal ini menjadikannya operasi O(n). Elakkan memanggilnya berulang kali dalam syarat gelung untuk rentetan besar.

#include <stdio.h>
#include <string.h>

int main(void) {
    char msg[] = "programming";
    size_t len = strlen(msg);
    for (size_t i = 0; i < len; i++) {
        printf("%c", msg[i]);
    }
    printf("\n");
    return 0;
}

strcpy: menyalin rentetan

Anda tidak boleh menyalin rentetan dengan =. Gunakan strcpy(dest, src) yang menyalin src ke dalam dest, termasuk penamat nol.

Destinasi mestilah cukup besar untuk menyimpan sumber serta penamatnya.

#include <stdio.h>
#include <string.h>

int main(void) {
    char src[] = "Hello";
    char dest[20];
    strcpy(dest, src);
    printf("%s\n", dest);
    return 0;
}

bahaya limpahan penimbal strcpy

Jika dest terlalu kecil, strcpy menulis melepasi penimbal lalu merosakkan memori. Ini ialah pepijat keselamatan klasik.

Utamakan strncpy(dest, src, n) yang menyalin paling banyak n bait. Nota: strncpy mungkin tidak menambah penamat nol jika src terlalu panjang.

#include <stdio.h>
#include <string.h>

int main(void) {
    char src[] = "LongString";
    char dest[5];
    strncpy(dest, src, 4);
    dest[4] = '\0';
    printf("%s\n", dest);
    return 0;
}

strcat: menggabungkan rentetan

strcat(dest, src) menambahkan src pada penghujung dest. Ia mula menulis pada penamat null milik dest dan menambah penamat baharu pada penghujungnya.

dest mestilah rentetan yang sah dan telah mempunyai ruang kosong yang mencukupi.

#include <stdio.h>
#include <string.h>

int main(void) {
    char buffer[20] = "Hello, ";
    strcat(buffer, "World");
    printf("%s\n", buffer);
    return 0;
}

Membina rentetan langkah demi langkah

Anda boleh merangkaikan strcpy dan strcat untuk membina rentetan sedikit demi sedikit.

Sentiasa mulakan dengan penimbal yang telah dimulakan supaya strcat pertama menemui penamat yang sah.

#include <stdio.h>
#include <string.h>

int main(void) {
    char full[50];
    strcpy(full, "Mr. ");
    strcat(full, "John ");
    strcat(full, "Smith");
    printf("%s\n", full);
    return 0;
}

Penggabungan lebih selamat dengan strncat

strncat(dest, src, n) menambahkan paling banyak n aksara daripada src, kemudian sentiasa menambah penamat null.

Ini membantu mencegah limpahan apabila panjang sumber tidak diketahui.

#include <stdio.h>
#include <string.h>

int main(void) {
    char dest[16] = "Data: ";
    char src[] = "1234567890";
    strncat(dest, src, 5);
    printf("%s\n", dest);
    return 0;
}

Nilai pulangan

Kedua-dua strcpy dan strcat memulangkan penuding kepada dest. Ini membolehkan anda menyarangkan panggilan, walaupun hal ini boleh menjejaskan kebolehbacaan.

strlen memulangkan size_t, iaitu jenis tanpa tanda. Berhati-hati apabila membandingkannya dengan integer bertanda.

#include <stdio.h>
#include <string.h>

int main(void) {
    char a[20] = "foo";
    char b[] = "bar";
    printf("%s\n", strcat(a, b));
    return 0;
}

Perangkap peruntukan yang lazim

Kesilapan yang kerap berlaku ialah terlupa menambah +1 untuk penamat null ketika menentukan saiz penimbal.

Untuk rentetan sepanjang n, anda memerlukan n + 1 bait. Panjang gabungan dua rentetan yang dicantumkan ialah strlen(a) + strlen(b) + 1.

#include <stdio.h>
#include <string.h>

int main(void) {
    char a[] = "abc";
    char b[] = "de";
    size_t needed = strlen(a) + strlen(b) + 1;
    printf("Need %lu bytes\n", needed);
    return 0;
}

Semakan pantas

Uji pemahaman anda tentang panjang rentetan.

Imbas kembali

Anda telah mempelajari fungsi teras string.h:

  • strlen mengira aksara sebelum '\0' (O(n)).
  • strcpy menyalin rentetan; destinasi mestilah cukup besar.
  • strcat menambahkan kandungan pada rentetan sedia ada.
  • Sentiasa sediakan ruang untuk penamat null dan utamakan varian strn* demi keselamatan.
Percuma untuk bermula

Pelajari C dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
39
Pelajaran
144

Soalan Lazim

Adakah pelajaran “strlen, strcpy, strcat” percuma?

Ya — teks penuh “strlen, strcpy, strcat” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus C Academy, tingkat taraf kepada CoddyKit PRO. Kursus C Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “strlen, strcpy, strcat”?

Fungsi string teras Anda berlatih C Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan C Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran C Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “strlen, strcpy, strcat” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran C Academy ini?

Ya. Setiap pelajaran C Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. strlen, strcpy, strcat
  2. strcmp dan Perbandingan
  3. strtok dan Pemtokenan
  4. memcpy dan memset
← Kembali ke C Academy