Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berbagai ukuran karakter dapat menyebabkan masalah saat Anda memasukkan karakter ke dalam buffer. Pertimbangkan kode berikut, yang menyalin karakter dari string, sz, ke dalam buffer, rgch:
cb = 0;
while( cb < sizeof( rgch ) )
rgch[ cb++ ] = *sz++;
Pertanyaannya adalah: Apakah byte terakhir menyalin byte prospek? Berikut ini tidak menyelesaikan masalah karena berpotensi meluapkan buffer:
cb = 0;
while( cb < sizeof( rgch ) )
{
_mbccpy( rgch + cb, sz );
cb += _mbclen( sz );
sz = _mbsinc( sz );
}
_mbccpy Panggilan mencoba melakukan hal yang benar - salin karakter lengkap, apakah itu 1 atau 2 byte. Tetapi tidak memperhitungkan bahwa karakter terakhir yang disalin mungkin tidak sesuai dengan buffer jika karakternya lebarnya 2 byte. Solusi yang benar adalah:
cb = 0;
while( (cb + _mbclen( sz )) <= sizeof( rgch ) )
{
_mbccpy( rgch + cb, sz );
cb += _mbclen( sz );
sz = _mbsinc( sz );
}
Kode ini menguji kemungkinan luapan buffer dalam pengujian perulangan, menggunakan _mbclen untuk menguji ukuran karakter saat ini yang ditujukkan oleh sz. Dengan melakukan panggilan ke _mbsnbcpy fungsi, Anda dapat mengganti kode dalam perulangan while dengan satu baris kode. Contohnya:
_mbsnbcpy( rgch, sz, sizeof( rgch ) );