Saya pikir dengan mengatur elemen pertama ke null akan menghapus seluruh isi array karakter.
char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';
Namun, ini hanya menyetel elemen pertama ke null.
atau
my_custom_data[0] = 0;
daripada menggunakan memset
, saya pikir 2 contoh di atas harus menghapus semua data.
Jawaban:
Itu tergantung pada bagaimana Anda ingin melihat array. Jika Anda melihat array sebagai rangkaian karakter, maka satu-satunya cara untuk menghapus data adalah dengan menyentuh setiap entri.
memset
mungkin cara paling efektif untuk mencapai ini.Di sisi lain, jika Anda memilih untuk melihat ini sebagai string diakhiri C / C ++ null, pengaturan byte pertama ke 0 akan menghapus string secara efektif.
sumber
Array dalam C hanyalah sebuah lokasi memori, jadi memang,
my_custom_data[0] = '\0';
tugas Anda hanya menyetel elemen pertama ke nol dan membiarkan elemen lainnya tetap utuh.Jika Anda ingin menghapus semua elemen larik, Anda harus mengunjungi setiap elemen. Itulah
memset
untuk:Ini umumnya cara tercepat untuk menangani masalah ini. Jika Anda dapat menggunakan C ++, pertimbangkan std :: fill sebagai gantinya:
sumber
Menurut Anda, mengapa menyetel satu elemen akan menghapus seluruh array? Di C, khususnya, hanya sedikit yang terjadi tanpa programmer secara eksplisit memprogramnya. Jika Anda menyetel elemen pertama ke nol (atau nilai apa pun), Anda telah melakukan hal itu, dan tidak lebih.
Saat menginisialisasi, Anda dapat mengatur array ke nol:
Kalau tidak, saya tidak tahu teknik apa pun selain memset, atau yang serupa.
sumber
Menggunakan:
Atau:
sumber
memset(my_custom_data, 0, strlen(my_custom_data));
) hanya akan menghapus '\ 0' pertama, yang mungkin berada di luar akhir larik. Ini mungkin, atau mungkin tidak, baik-baik saja.Coba kode berikut:
sumber
Mengapa tidak digunakan
memset()
? Begitulah cara melakukannya.Mengatur elemen pertama membuat sisa memori tidak tersentuh, tetapi fungsi str akan memperlakukan data sebagai kosong.
sumber
Tolong temukan di bawah ini di mana saya telah menjelaskan dengan data dalam array setelah kasus 1 & kasus 2.
Kasus 1:
Hasil:
Kasus 2:
Hasil:
Meskipun menyetel argumen pertama ke NULL akan melakukan triknya, disarankan menggunakan memset
sumber
Nggak. Yang Anda lakukan hanyalah menyetel nilai pertama ke '\ 0' atau 0.
Jika Anda bekerja dengan string yang dihentikan null, maka pada contoh pertama, Anda akan mendapatkan perilaku yang meniru apa yang Anda harapkan, namun memori masih disetel.
Jika Anda ingin menghapus memori tanpa menggunakan memset, gunakan for loop.
sumber
Anda harus menggunakan memset. Menyetel elemen pertama saja tidak akan berfungsi, Anda perlu menyetel semua elemen - jika tidak, bagaimana Anda bisa menyetel hanya elemen pertama ke 0?
sumber
Menulis karakter nol ke karakter pertama hanya melakukan itu. Jika Anda memperlakukannya sebagai string, kode yang mematuhi karakter penghentian nol akan memperlakukannya sebagai string nol, tetapi itu tidak sama dengan membersihkan data. Jika Anda ingin benar-benar menghapus data, Anda harus menggunakan memset.
sumber
Saya biasanya hanya melakukan seperti ini:
sumber
Itu tidak benar seperti yang Anda temukan
Persis!
Anda perlu menggunakan memset untuk menghapus semua data, itu tidak cukup untuk mengatur salah satu entri ke null.
Namun, jika menyetel elemen array ke null berarti sesuatu yang istimewa (misalnya saat menggunakan string penghentian null di), mungkin cukup untuk menyetel elemen pertama ke null. Dengan cara itu setiap pengguna array akan mengerti bahwa array tersebut kosong meskipun array tersebut masih menyertakan karakter lama dalam memori
sumber
setel elemen pertama ke NULL. mencetak array karakter tidak akan mengembalikan apa-apa.
sumber
Bagaimana dengan yang berikut ini:
sumber
sumber
Coba yang berikut ini:
sumber