char str[]="beautiful earth";
memset(str,'*',6);
printf("%s",str);
output:
******ful earth
int arr[15];
memset(arr,1,6);
Tidak, Anda tidak dapat menggunakan memset()
seperti ini. manpage mengatakan (penekanan milik saya):
Fungsi
memset()
mengisin
bytes pertama dari area memori yang ditunjuk olehs
dengan konstanta bytec
.
Karena sebuah int
biasanya 4 byte, hal ini tidak akan cukup.
Jika Anda (salah!!!) mencoba melakukan ini:
int arr[15];
memset(arr, 1, 6*sizeof(int)); //wrong!
maka 6 int
pertama dalam larik sebenarnya akan diatur ke 0x01010101 = 16843009.
Satu-satunya waktu yang benar-benar dapat diterima untuk menulis di atas sebuah data dengan tipe data non-byte, adalah memset(thing, 0, sizeof(thing));
untuk "zero-out" seluruh struture/array. Ini bekerja karena NULL, 0x00000000, 0.0, semuanya benar-benar nol.
Solusinya adalah dengan menggunakan loop for
dan mengaturnya sendiri:
int arr[15];
int i;
for (i=0; i<6; ++i) // Set the first 6 elements in the array
arr[i] = 1; // to the value 1.
Argumen ketiga dari memset adalah ukuran byte. Jadi, anda harus mengatur total ukuran byte dari arr[15]
memset(arr, 1, sizeof(arr));
Namun mungkin, Anda harus ingin menetapkan nilai 1 untuk seluruh elemen dalam arr. Maka anda lebih baik mengaturnya di dalam loop.
for (i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) {
arr[i] = 1;
}
Karena memset()
menetapkan 1 di setiap byte. Jadi itu bukan yang Anda harapkan.