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.
buffer 'pengidentifikasi' ukuran N byte akan diserbu; Byte M akan ditulis mulai dari offset L
Keterangan
C4789 memperingatkan tentang overruns buffer ketika fungsi run-time (CRT) C tertentu digunakan. Ini juga dapat melaporkan ketidakcocokan ukuran ketika parameter diteruskan atau penugasan dibuat. Peringatan dimungkinkan jika ukuran data diketahui pada waktu kompilasi. Peringatan ini untuk situasi yang mungkin mengelabui deteksi ketidakcocokan ukuran data biasa.
C4789 memperingatkan ketika data disalin ke dalam blok data yang diketahui terlalu kecil pada waktu kompilasi.
Peringatan terjadi jika salinan menggunakan bentuk intrinsik dari salah satu fungsi CRT ini:
Peringatan juga muncul saat Anda mentransmisikan parameter ke jenis data yang lebih besar, lalu membuat penugasan salinan dari referensi lvalue.
Visual C++ mungkin menghasilkan peringatan ini untuk jalur kode yang tidak pernah dijalankan. Anda dapat menonaktifkan peringatan untuk sementara waktu dengan menggunakan #pragma, seperti yang ditunjukkan dalam contoh ini:
#pragma warning( push )
#pragma warning( disable : 4789 )
// unused code that generates compiler warning C4789
#pragma warning( pop )
Idiom ini membuat Visual C++ tidak menghasilkan peringatan untuk blok kode tertentu tersebut. Mempertahankan #pragma warning(push) status yang ada sebelum #pragma warning(disable: 4789) mengubahnya. Memulihkan #pragma warning(pop) status yang didorong, dan menghapus efek dari #pragma warning(disable:4789). Untuk informasi selengkapnya tentang direktif praprosesor C++, lihat warning dan arahan Pragma serta kata kunci __pragma dan _Pragma.
/sdl Opsi kompilator (Aktifkan Pemeriksaan Keamanan Tambahan) meningkatkan peringatan ini menjadi kesalahan.
Contoh
Contoh berikut menghasilkan C4789:
// C4789.cpp
// compile with: /Oi /W1 /c
#include <string.h>
#include <stdio.h>
int main()
{
char a[20];
strcpy(a, "0000000000000000000000000\n"); // C4789
char buf2[20];
memset(buf2, 'a', 21); // C4789
char c;
wchar_t w = 0;
memcpy(&c, &w, sizeof(wchar_t));
}
Contoh berikut juga menghasilkan C4789:
// C4789b.cpp
// compile with: /W1 /O2 /c
// processor: x86
short G;
int main()
{
int * p = (int *)&G;
*p = 3; // C4789 - writes an int through a pointer to short
}