0Pricing
C Academy · Ders

strlen, strcpy, strcat

Temel dizge işlevleri

strlen, strcpy, strcat, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.

C Dilinde Dizeler

C dilinde dize, özel bir sonlandırıcı null karakteri olan '\0' ile biten bir char dizisidir.

<string.h> içindeki işlevler, bir dizenin nerede bittiğini anlamak için bu sonlandırıcıya güvenir. Sonlandırıcı olmazsa dizinin sonunu aşarak okuma yaparlar.

#include <stdio.h>

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

string.h Dosyasını Ekleme

Dize işlevlerini kullanmak için başlık dosyasını eklemelisiniz:

  • #include <string.h>

Bu işlem size strlen, strcpy, strcat, strcmp ve daha fazlasını sağlar.

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

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

strlen: Karakterleri Sayma

strlen, null sonlandırıcının önündeki karakter sayısını döndürür. '\0' karakterini kendisi saymaz.

Bu nedenle strlen("cat"), dizi 4 bayt tutsa da 3 döndürür.

#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 O(n) İşlemidir

C dizelerinde uzunluk saklanmadığı için strlen, '\0' karakterini bulana kadar her karakterin üzerinden geçmelidir.

Bu nedenle işlem O(n) maliyetindedir. Büyük dizelerde bunu bir döngü koşulu içinde tekrar tekrar çağırmaktan kaçının.

#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: Dizeleri Kopyalama

Dizeleri = ile kopyalayamazsınız. src içeriğini null sonlandırıcıyla birlikte dest içine kopyalayan strcpy(dest, src) işlevini kullanın.

Hedef, kaynak ve sonlandırıcıyı alabilecek kadar büyük olmalıdır.

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

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

strcpy Arabellek Taşması Tehlikesi

dest çok küçükse strcpy arabelleğin dışına yazar ve belleği bozar. Bu, klasik bir güvenlik hatasıdır.

En fazla n bayt kopyalayan strncpy(dest, src, n) işlevini tercih edin. Not: src çok uzunsa strncpy null sonlandırma yapmayabilir.

#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: dizeleri birleştirme

strcat(dest, src), src dizesini dest dizisinin sonuna ekler. Yazmaya dest dizisinin null sonlandırıcısının bulunduğu yerden başlar ve sona yeni bir tane ekler.

dest, yeterli boş alana sahip geçerli bir dize olmalıdır.

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

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

Dizeleri adım adım oluşturma

Bir dizeyi parça parça oluşturmak için strcpy ve strcat çağrılarını zincirleyebilirsiniz.

İlk strcat çağrısının geçerli bir sonlandırıcı bulabilmesi için her zaman başlatılmış bir arabellekle başlayın.

#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;
}

strncat ile daha güvenli birleştirme

strncat(dest, src, n), src içinden en fazla n karakter ekler ve ardından her zaman bir null sonlandırıcı koyar.

Bu, kaynak uzunluğu bilinmediğinde taşmaları önlemeye yardımcı olur.

#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;
}

Dönüş değerleri

Hem strcpy hem de strcat, dest konumunu gösteren bir işaretçi döndürür. Bu, çağrıları iç içe yerleştirmenizi sağlar; ancak okunabilirliği azaltabilir.

strlen, işaretsiz olan bir size_t döndürür. Bunu işaretli tamsayılarla karşılaştırırken dikkatli olun.

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

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

Yaygın bellek ayırma hatası

Sık yapılan bir hata, arabellek boyutunu belirlerken null sonlandırıcı için gereken +1 değerini unutmaktır.

Uzunluğu n olan bir dize için n + 1 bayt gerekir. Birleştirilen iki dizenin toplam uzunluğu strlen(a) + strlen(b) + 1 olur.

#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;
}

Kısa kontrol

Dize uzunlukları konusundaki anlayışınızı sınayın.

Özet

Temel string.h işlevlerini öğrendiniz:

  • strlen, '\0' öncesindeki karakterleri sayar (O(n)).
  • strcpy, bir dizeyi kopyalar; hedef yeterince büyük olmalıdır.
  • strcat, mevcut bir dizenin sonuna ekleme yapar.
  • Null sonlandırıcı için her zaman yer ayırın ve güvenlik için strn* türevlerini tercih edin.

Sıkça Sorulan Sorular

“strlen, strcpy, strcat” dersi ücretsiz mi?

Evet — “strlen, strcpy, strcat” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.

“strlen, strcpy, strcat” dersinde ne öğreneceğim?

Temel dizge işlevleri C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“strlen, strcpy, strcat” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. strlen, strcpy, strcat
  2. strcmp ve Karşılaştırma
  3. strtok ve Belirteçlere Ayırma
  4. memcpy ve memset
← C Academy Sayfasına Dön