C'de strlen() ve strcpy() Fonksiyonlarını Kendin Yazma

C'de string işlemleri pointerlar ve bellek yönetimiyle yakından ilişkili. Standart kütüphanedeki strlen() ve strcpy() fonksiyonlarını anlamak için kendi versiyonlarını yazmak eğitici.

strlen() fonksiyonu bir stringin uzunluğunu hesaplar. Null terminator ('\0') karakterine kadar kaç karakter olduğunu sayar. strcpy() ise bir stringi başka bir yere kopyalar.

1 <stdio.h>
2
3// strlen() versiyonumuz
4int my_strlen(const char *str) {
5int count = 0;
6while (str[count]!= '\0') {
7count++;
8}
9return count;
10}
11
12// strcpy() versiyonumuz
13char* my_strcpy(char *destination, const char *source) {
14int i = 0;
15while (source[i]!= '\0') {
16destination[i] = source[i];
17i++;
18}
19destination[i] = '\0'; // Null terminator ekle
20return destination;
21}
22
23int main() {
24char source[] = "Merhaba Dunya";
25char destination[50];
26
27printf("Kaynak string: %s\n", source);
28printf("String uzunlugu: %d\n", my_strlen(source));
29
30my_strcpy(destination, source);
31printf("Kopyalanan string: %s\n", destination);
32
33return 0;
34}

Beklenen çıktı:

1Kaynak string: Merhaba Dunya
2String uzunlugu: 13
3Kopyalanan string: Merhaba Dunya

my_strlen() işaretçi üzerinde döngü kurar ve her karakteri kontrol eder. Null terminator bulunca durar. my_strcpy() ise karakterleri teker teker kopyalar ve sonuna null terminator ekler, bu kritik, aksi halde string sonlanmaz.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Pointer versiyonları daha verimli. Bunları yazarsan:

1int my_strlen_ptr(const char *str) {
2const char *ptr = str;
3while (*ptr!= '\0')
4ptr++;
5return ptr - str; // Fark = uzunluk
6}
7
8char* my_strcpy_ptr(char *dest, const char *src) {
9while ((*dest++ = *src++)!= '\0');
10return dest;
11}

İkinci versiyon daha kompakt ve hızlı. Fakat başlangıçta array versiyonu daha anlaşılır.

Sık yapılan hata: strcpy() kullanırken destination buffer'ının yeterli boyutta olduğundan emin olmamak. Eğer source 50 karakter ama destination 20 boyutundaysa buffer overflow olur. Güvenli yazmak için my_strncpy() yazabilirsin; maksimum karakter sayısı parametresi al.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz