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
- strlen, strcpy, strcat
- strcmp ve Karşılaştırma
- strtok ve Belirteçlere Ayırma
- memcpy ve memset