CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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

Soru
char dest[4];
____(dest, "Merhaba", 3);
dest[3] = '\0';
Cevap
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.

Orta seviye bölümündeki tüm dersler