memset()
void*
her zaman işleve iletilen adresle aynı değeri döndürmek üzere bildirilir .
Dönüş değerinin faydası nedir? Neden geri dönmüyor void
?
memset()
void*
her zaman işleve iletilen adresle aynı değeri döndürmek üzere bildirilir .
Dönüş değerinin faydası nedir? Neden geri dönmüyor void
?
strcat()
? Bazen standart işlevler, oldukları gibi değil, belirtildikleri şeylerdir. belirtilir .
Yanıtlar:
İmza tüm diğer benzer fonksiyonları ile uyumludur: memcpy()
, strcpy()
vb hep bu tür fonksiyonlara zincir aramaları edebilmesine imkan vermek için yapılır ve başka şekilde ifadelerinde bu tür aramaları kullanmak düşündüm.
Bununla birlikte, geri dönüş değerini bu şekilde kullanmaya mecbur hissettiğim gerçek dünya durumuna asla rastlamadım.
Aşağıdaki gibi çağrı zincirleme için kullanılabilir:
char a[200];
strcpy(memset(a, 0, 200), "bla");
strcpy
, imleci kopyalanan sonuncuyu geçtikten sonra geri döndürmek daha mantıklı olurdu . memset(my_strcpy(a, "bla"), 0, a + 200);
( C ++ 'da beğen std::copy_n
ve std::fill_n
yap).
Google'da memset'in ne döndüğünü görmek için bu soruyla karşılaştım.
Bir değeri test ettiğim bir kodum var, o zaman bu doğruysa, bir değerin sıfır olup olmadığını test edin.
C de sıfırları test etmenin tamamen taşınabilir bir yolu olmadığı için ortada memset çalıştırmalıyım.
Yani benim kodum:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Bu, önceki sorularda listelenen zincirleme amacına hitap eder, ancak bu tekniğin kullanımına bir örnektir.
Bunun iyi bir kodlama olup olmadığına karar vermeyi başkalarına bırakacağım.