memset()
zadeklarowano, że zwraca void*
, która zawsze ma tę samą wartość, co adres przekazany do funkcji.Jaka jest wartość zwracana przez memset()?
Jaki jest pożytek z zwracanej wartości? Dlaczego nie zwraca ona void
?
memset()
zadeklarowano, że zwraca void*
, która zawsze ma tę samą wartość, co adres przekazany do funkcji.Jaka jest wartość zwracana przez memset()?
Jaki jest pożytek z zwracanej wartości? Dlaczego nie zwraca ona void
?
Podpis jest zgodny ze wszystkimi innymi podobnymi funkcjami: memcpy()
, strcpy()
itp Zawsze myślałem Zrobiono to, aby umożliwić jeden do połączeń łańcuchowych do takie funkcje i w przeciwnym razie używać takich wywołań w wyrażeniach.
To powiedziawszy, nigdy nie spotkałem się z rzeczywistą sytuacją, w której czułbym się zmuszony do używania wartości zwrotu w taki sposób.
może być używany do połączenia łańcuchowego jak:
char a[200];
strcpy(memset(a, 0, 200), "bla");
Tak, zdecydowanie jest to przypadek użycia "łańcuchowego". – Cartesius00
Poprawiłem odpowiedź, ponieważ jest to interesujący przypadek. Ale w prawdziwym życiu uważam, że lepiej jest zachować oddzielenie połączeń i połączeń. –
Programiści C kochają nieczytelny kod, więc umożliwienie nieskończonego łączenia jest koniecznością podczas projektowania standardowej funkcji. –
Aby korzystać z funkcji jako argumentu innej funkcji, takich jak sprintf
natknąłem to pytanie, gdy Googling zobaczyć co memset zwrócone.
Mam pewien kod, w którym testuję jedną wartość, a następnie, jeśli jest to prawdziwy test, aby sprawdzić, czy wartość jest zerowa.
Ponieważ nie ma całkowicie przenośnej drogi w C, aby przetestować zera, muszę uruchomić memset w środku.
Więc mój kod jest:
if (a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0))
To przemawia do celów łańcuchowym wymienionych w poprzednich pytaniach, ale jest przykładem zastosowania tej techniki.
Zostawię to innym, aby ocenić, czy to dobre kodowanie, czy nie.
Spójność z innymi funkcjami 'mem *', które prawdopodobnie w większości zwracają 'void *'? –
http://thevirtualmachinist.blogspot.co.uk/2010/08/whats-return-value-of-memset.html – BoBTFish
@BoBTFish Nice link. – Cartesius00