Dize güvenliği
- C kursu
- Orta seviye
- Ders 22/116
- 5 dk
strncpy ve strncat ile güvenli dize işleme öğrenirsin.
strncpy ile güvenli kopyalama
strncpy(dest, src, n), src'den dest'e en fazla n bayt kopyalar. Bu, taşmayı önler ama bir tuzağı vardır: src n'den uzunsa dest null ile sonlanmaz.
Örnek: char dest[4]; strncpy(dest, "Merhaba", 4);. Burada yalnızca "Merh" kopyalanır (4 bayt), null eklenmez. Güvenli kullanım için dest[n-1] = '\0'; ile sonlandırman gerekir. Bu desen, kullanıcı girişi ve ağ verisi gibi güvenilmeyen kaynaklarda standarttır. strcpy'nin aksine strncpy boyut kontrolü yapar.
strncat ile güvenli birleştirme
strncat(dest, src, n), src'den en fazla n baytı dest'in sonuna ekler. strncpy'den farklı olarak, her zaman null sonlandırma ekler.
Örnek: char dest[20] = "Merhaba"; strncat(dest, " dünya", 6);. Burada en fazla 6 bayt eklenir; sonuç null ile sonlanır. n, eklenecek maksimum bayt sayısıdır; dest'in toplam boyutu değil. Bu yüzden n'yi sizeof(dest) - strlen(dest) - 1 olarak hesaplamak güvenli kullanımdır. strncat, strcat'in güvenli versiyonudur.
Uygulama strncpy ile güvenli kopya
char dest[4]; ile dört baytlık bir dizi tanımla. strncpy(dest, "Merhaba", 3); ile en fazla üç bayt kopyala. dest[3] = '\0'; ile null sonlandır. printf("%s\n", dest); ile yazdır. <string.h> başlık dosyasını ekle.
Başlangıç kodu
#include <stdio.h>
#include <string.h>
// 4 baytlık dest tanımla
// strncpy ile 3 bayt kopyala
// dest[3]'ü null yap, yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <string.h>
int main(void) {
char dest[4];
strncpy(dest, "Merhaba", 3);
dest[3] = '\0';
printf("%s\n", dest);
return 0;
}Beklenen çıktı
Mer
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Güvenli fonksiyonları eşle
| Kavram | Anlamı |
|---|---|
strncpy |
Sınırlı kopya |
strncat |
Sınırlı ekle |
snprintf |
Sınırlı biçim |
strcpy |
Sınırsız (tehlikeli) |
2 strncpy çağrısını tamamla
char dest[4];
____(dest, "Merhaba", 3);
dest[3] = '\0';
char dest[4];
strncpy(dest, "Merhaba", 3);
dest[3] = '\0';
Açıklama: strncpy sınırlı kopyalama yapar.
3 strncpy ne yapar?
- Sınırsız kopyalar
- Yalnızca işaretçi döndürür
- Dize boyunu döndürür
- En fazla n bayt kopyalar Doğru cevap
Açıklama: strncpy, en fazla n bayt kopyalar; bu sayede taşma önlenir.