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#include <stdio.h>23// strlen() versiyonumuz4int my_strlen(const char *str) {5int count = 0;6while (str[count]!= '\0') {7count++;8}9return count;10}1112// strcpy() versiyonumuz13char* 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 ekle20return destination;21}2223int main() {24char source[] = "Merhaba Dunya";25char destination[50];2627printf("Kaynak string: %s\n", source);28printf("String uzunlugu: %d\n", my_strlen(source));2930my_strcpy(destination, source);31printf("Kopyalanan string: %s\n", destination);3233return 0;34}Beklenen çıktı:
1Kaynak string: Merhaba Dunya2String uzunlugu: 133Kopyalanan string: Merhaba Dunyamy_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.
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 = uzunluk6}78char* 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.
0 yorum