memset()
dideklarasikan untuk mengembalikan nilai void*
yang selalu sama dengan alamat yang diteruskan ke fungsi.
Apa gunanya nilai kembali? Mengapa tidak kembali void
?
memset()
dideklarasikan untuk mengembalikan nilai void*
yang selalu sama dengan alamat yang diteruskan ke fungsi.
Apa gunanya nilai kembali? Mengapa tidak kembali void
?
strcat()
? Terkadang, fungsi standar adalah apa yang ditentukan, bukan apa yang seharusnya .
Jawaban:
Tanda tangan ini sejalan dengan semua fungsi serupa lainnya: memcpy()
, strcpy()
dll Saya selalu berpikir ini dilakukan untuk memungkinkan seseorang untuk panggilan rantai untuk fungsi tersebut, dan untuk sebaliknya menggunakan panggilan tersebut dalam ekspresi.
Meskipun demikian, saya tidak pernah menemukan situasi dunia nyata di mana saya merasa harus menggunakan nilai pengembalian dengan cara seperti itu.
Ini dapat digunakan untuk rantai panggilan seperti:
char a[200];
strcpy(memset(a, 0, 200), "bla");
strcpy
mengembalikan penunjuk melewati yang terakhir disalin. memset(my_strcpy(a, "bla"), 0, a + 200);
(suka std::copy_n
dan std::fill_n
lakukan di C ++).
Saya menemukan pertanyaan ini ketika Googling untuk melihat memset apa yang dikembalikan.
Saya memiliki beberapa kode di mana saya menguji satu nilai, kemudian jika itu adalah tes yang benar untuk melihat apakah nilainya nol.
Karena tidak ada cara yang sepenuhnya portabel di C untuk menguji nol, saya harus menjalankan memset di tengah.
Jadi kode saya adalah:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Ini berbicara tentang tujuan rangkaian yang tercantum dalam pertanyaan sebelumnya, tetapi ini adalah contoh penggunaan teknik ini.
Saya akan menyerahkan kepada orang lain untuk menilai apakah ini pengkodean yang baik atau tidak.