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:
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:
Ç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:
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;
}