memset()
viene dichiarato per restituire void*
che è sempre lo stesso valore dell'indirizzo passato alla funzione.
Qual è l'uso del valore di ritorno? Perché non ritorna void
?
memset()
viene dichiarato per restituire void*
che è sempre lo stesso valore dell'indirizzo passato alla funzione.
Qual è l'uso del valore di ritorno? Perché non ritorna void
?
strcat()
? A volte, le funzioni standard sono ciò che devono essere specificate, non ciò che dovrebbero essere.
Risposte:
La firma è in linea con tutte le altre funzioni simili: memcpy()
, strcpy()
ecc Ho sempre pensato che questo è stato fatto per consentire uno a chiamate a catena a tali funzioni, e ad utilizzare in altro modo tali chiamate nelle espressioni.
Detto questo, non mi sono mai imbattuto in una situazione del mondo reale in cui mi sentirei obbligato a utilizzare il valore di ritorno in questo modo.
Può essere utilizzato per il concatenamento delle chiamate come:
char a[200];
strcpy(memset(a, 0, 200), "bla");
strcpy
riportare il puntatore oltre l'ultimo copiato. memset(my_strcpy(a, "bla"), 0, a + 200);
(come std::copy_n
e std::fill_n
fai in C ++).
Mi sono imbattuto in questa domanda quando ho cercato su Google per vedere quale memset è tornato.
Ho del codice in cui provo un valore, quindi se questo è vero prova per vedere se un valore è zero.
Poiché non esiste un modo completamente portabile in C per testare gli zeri, devo eseguire memset nel mezzo.
Quindi il mio codice è:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Questo parla dello scopo del concatenamento elencato nelle domande precedenti, ma è un esempio di utilizzo di questa tecnica.
Lascerò ad altri il compito di giudicare se questa è una buona codifica o meno.