Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Değişken karakter boyutları, arabelleğe karakter yerleştirdiğinizde sorunlara neden olabilir. Dizedeki karakterleri szarabelleğe rgchkopyalayan aşağıdaki kodu göz önünde bulundurun:
cb = 0;
while( cb < sizeof( rgch ) )
rgch[ cb++ ] = *sz++;
Soru şudur: Son bayt bir müşteri adayı baytını kopyalandı mı? Arabellekte taşma olasılığı olduğundan aşağıdakiler sorunu çözmez:
cb = 0;
while( cb < sizeof( rgch ) )
{
_mbccpy( rgch + cb, sz );
cb += _mbclen( sz );
sz = _mbsinc( sz );
}
Çağrı _mbccpy doğru şeyi yapmaya çalışır; 1 veya 2 bayt olsun, tam karakteri kopyalayın. Ancak, kopyalanan son karakterin 2 bayt genişliğindeyse arabelleğe sığmayabileceği dikkate alınmaz. Doğru çözüm:
cb = 0;
while( (cb + _mbclen( sz )) <= sizeof( rgch ) )
{
_mbccpy( rgch + cb, sz );
cb += _mbclen( sz );
sz = _mbsinc( sz );
}
Bu kod, tarafından işaret edilen geçerli karakterin boyutunu test etmek için kullanarak _mbclen döngü testinde olası arabellek taşması sziçin sınar. İşleve _mbsnbcpy çağrı yaparak döngüdeki while kodu tek bir kod satırıyla değiştirebilirsiniz. Örneğin:
_mbsnbcpy( rgch, sz, sizeof( rgch ) );