BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C standart kütüphanesi > <string.h> > strncpy

strncpy() fonksiyonu

Bildirim

char* strncpy(char *dest, const char *src, size_t n);

char* strncpy(char *restrict dest, const char *restrict src, size_t n); (C99)

errno_t strncpy_s(char *restrict dest, rsize_t destsz, const char *restrict src, rsize_t n); (C11)

Açıklama

Src parametresi ile gösterilen ve boş bir karakter ('\0') ile sonlandırılmış karakter dizisinin n parametre değeri kadar ilk karakterini, dest parametresi ile gösterilen ve boş bir karakter ('\0') ile sonlandırılmış karakter dizisinin yerine kopyalar.

Eğer src parametresindeki karakter dizisinin uzunluğu n parametre değerinden az olursa, dest parametresiğnin geri kalan kısmı boş byte değerleriyle doldurulur.

Eğer src parametresindeki karakter dizisi n parametre değerinden uzun ise, dest parametresi ile gösterilen karakter dizisinin sonuna boş bir karakter ('\0') eklenmediğinden, elde edilen karakter dizisi boş bir karakterle sonlandırılmış bir dizi olmayacaktır.

N parametre değeri kadar ilk karakter boş olmayan bir karakter ise, dest parametresi boş bir karakterle sonlandırılmış bir karakter dizisi içermeyecektir.

Aşağıdaki koşullardan biri gerçekleştiğinde belirsiz sonuçlar elde edilir:

  • Eğer dest parametresinin boyutu n parametre değerinden daha küçük ise ve sonunda boş bir karakter ('\0') içermiyorsa,
  • Eğer src parametresinin boyutu n parametre değerinden daha küçük ise,
  • Src ve dest parametrelerinden birisi bir karakter dizisini gösteren bir işaretçi değilse,
  • Eğer src ve dest parametreleri çakışırsa.

strncpy_s() fonksiyonu için ise;

Çalışma zamanında aşağıdaki hatalar tespit edildiğinde yüklenmiş olan kısıtlayıcı işlem fonksiyonu çağrılır:

  • Src parametresi ile gösterilen karakter dizisinin, n parametre değeri kadar ilk karakterini, ilk boş karakterle ile karşılaşıldığında işlem sona ermek üzere, dest parametresi ile gösterilen karakter dizisinin yerine kopyalar.
  • Dest parametresindeki yeni karakter dizisinin sonuna boş bir karakter eklendiğinden, boş bir karakterle sonlandırılmış bir karakter dizisi elde edilmiş olur.
  • Bir hata ile karşılaşılırsa, dest parametresinin geri kalanı tanımlanmamış değerler alır.

Çalışma zamanında aşağıdaki hatalar tespit edildiğinde yüklenmiş olan kısıtlayıcı işlem fonksiyonu çağrılır:

  • Src veya dest parametre değeri NULL bir işaretçi ise,
  • Destsz veya n parametre değeri 0 veya RSIZE_MAX değerinden büyük ise,
  • Destsz parametre değerinin src parametresinin boyutundan küçük veya eşit olması nedeniyle kopyalama işleminde kesinti meydana gelirse,
  • Src ve Dest parametrelerindeki dizeler arasında örtüşme meydan gelirse.

Parametreler

dest: Üzerine kopyalama yapılacak olan boş bir karakter ('\0') ile sonlandırılmış bir karakter dizisidir.

src: Dest parametresinin üzerine kopyalanacak olan boş bir karakter ('\0') ile sonlandırılmış bir karakter dizisidir.

n: Dest parametresinin kopyalanacak olan maksimum karakter sayısıdır.

destsz: Dest parametresine kopyalanacak maksimum karakter sayısıdır.

Dönüş değeri

Dönüş değeri;

Strncpy() fonksiyonu dest parametre değerini geri döndürür.

Strncpy_s() fonksiyonu başarı durumunda 0 değerini, hata durumunda sıfır olmayan değer geri döndürür. Hata durumunda ayrıca, dest NULL bir işaretçi değilse veya destsz sıfır değilse veya RSIZE_MAX değerinden büyük değil ise, dest[0] adresine 0 değerini yazar.

Örnek


#include <stdio.h>
#include <string.h>

int main(void)
{
    char cdizi1[] = "Bilgisayar";
    const char cdizi2[] = "Programlama";

    strncpy(cdizi1, cdizi2, 7);

    printf("cdizi1 bellek içeriği: %s\n", cdizi1);

    return 0;
}


Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar.

cdizi1 bellek içeriği: Programyar

Program strncpy() fonksiyonu ile bir karakter dizisinin ilk 7 karakterini diğer bir karakter dizisinin üzerine kopyaladıktan sonra elde edilen yeni karakter dizisini ekrana yazar.

Kaynak kodu

Copyright Public domain


char* strncpy(char *dest, const char *src, size_t n)
{
  char *ret = dest;
  
  do {
     if(!n--)
        return ret;
  } while(*dest++ = *src++);
  
  while(n--)
    *dest++ = 0;
  
  return ret;
}