C、C++语言高危,高风险函数、内存溢出(一)
1.gets - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用char*fgets(char *dest ,int n, stdin);
前提是,我们必须清楚n必须小于dest的大小,以保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
fgets(dest,MAX_SIZE-1,stdin);
......
2._getws - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用wchar_t*fgetws(wchar_t *dest ,int n, stdin);
前提是,我们必须清楚n必须小于dest的大小,以保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
wchar_tdest[MAX_SIZE];
wmemset(dest,0,MAX_SIZE);
fgetws(dest,MAX_SIZE-1,stdin);
......
3._getts - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用TCHAR *fgetts(TCHAR *dest ,int n, stdin);
前提是,我们必须清楚n必须小于dest的大小,以保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
TCHAR dest[MAX_SIZE];
memset(dest,0,MAX_SIZE*sizeof(TCHAR));
fgetts(dest,MAX_SIZE-1,stdin);
......
4.strcpy - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用char*strncpy(char *dest, const char *src, size_t n);
前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
......
memset(dest,0,MAX_SIZE);
strncpy(dest,src,MAX_SIZE-1);
......
5.lstrcpy - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用LPTSTRlstrcpyn(LPTSTR dest, LPCTSTR src, int n);
前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度.另外请注意函数lstrcpyn会自动在第n-1位填充0,无论第n-1位是否还有有效数据.
例子:
......
char dest[MAX_SIZE];
......
lstrcpyn(dest,src,MAX_SIZE);
......
6.lstrcpyA - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用LPTSTRlstrcpyn(LPTSTR dest, LPCTSTR src, int n);
前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度.另外请注意函数lstrcpyn会自动在第n-1位填充0,无论第n-1位是否还有有效数据.
例子:
......
char dest[MAX_SIZE];
......
lstrcpyn(dest,src,MAX_SIZE);
......
7.lstrcpyW - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用wchar_t*wcsncpy(wchar_t *dest, const wchar_t *src,size_t n);
前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.
例子:
......
wchar_tdest[MAX_SIZE];
......
wmemset(dest,0,MAX_SIZE);
wcsncpy(dest,src,MAX_SIZE-1);
......
8.wcscpy - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用wchar_t*wcsncpy(wchar_t *dest, const wchar_t *src,size_t n);
前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.
例子:
......
wchar_tdest[MAX_SIZE];
......
wmemset(dest,0,MAX_SIZE);
wcsncpy(dest,src,MAX_SIZE-1);
......
9._tcscpy - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用TCHAR*tcsncpy(TCHAR *dest, const TCHAR *src, size_tn);
前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.
例子:
......
TCHAR dest[MAX_SIZE];
......
memset(dest,0,MAX_SIZE*sizeof(TCHAR));
tcsncpy(dest,src,MAX_SIZE-1);
......
10._ftcscpy - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用char*_ftcsncpy(char* dest,const char* src, unsignedint n);
前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
......
memset(dest,0,MAX_SIZE);
_ftcsncpy(dest,src,MAX_SIZE-1k);
......
11.StrCpy - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用char*strncpy(char *dest, const char *src, size_t n);
前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
......
memset(dest,0,MAX_SIZE);
strncpy(dest,src,MAX_SIZE-1);
......
12.strcat - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用char*strncat(char *dest , const char *src,size_t n);
前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
......
strncat(dest,src,MAX_SIZE-strlen(dest)-1);
......
13.wcscat - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用wchar_t*wcsncat(wchar_t *dest, const wchar_t *src,size_t n);
前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
wchar_tdest[MAX_SIZE];
wmemset(dest,0,MAX_SIZE);
......
wcsncat(dest,src,MAX_SIZE-wcslen(dest)-1);
......
14._mbscat - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用unsigned char* _mbsncat(unsigned char*dest,constunsigned char* src, size_t n);
前提是,我们必须清楚目标缓存区dest的大小和源缓存区src的长度,dest首先以0赋值,以保证0结尾.否则还是将会导致不可预料的结果.
例子:
......
unsigned char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
......
_mbsncat(dest,src,MAX_SIZE-strlen(dest)-1);
......
15._tcscat - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用char*_tcsncat(char *dest , const char *src,size_t n);
前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
......
_tcsncat(dest,src,MAX_SIZE-strlen(dest)-1);
......
16.StrCat - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用char*strncat(char *dest , const char *src,size_t n);
前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
......
strncat(dest,src,MAX_SIZE-strlen(dest)-1);
......
17.StrCatA - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用char*strncat(char *dest , const char *src,size_t n);
前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
......
strncat(dest,src,MAX_SIZE-strlen(dest)-1);
......
18.StrCatW - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用wchar_t*wcsncat(wchar_t *dest, const wchar_t *src,size_t n);
前提是,我们必须清楚目标缓存区dest所剩下的大小和源缓存区src的长度,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
wchar_t dest[MAX_SIZE];
wmemset(dest,0,MAX_SIZE);
......
wcsncat(dest,src,MAX_SIZE-wcslen(dest)-1);
......
19.sprintf - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用int _snprintf(char *dest,size_t n, const char*format[,argument...]);
前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
_snprintf(dest,MAX_SIZE-1,formatstring,args);
......
20.wsprintf - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用intwnsprintf(LPTSTR dest ,int n, LPCTSTR pszFmt);
前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
wnsprintf(dest,MAX_SIZE-1,pszFmt);
......
21.wsprintfA - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用intwnsprintf(LPTSTR dest ,int n, LPCTSTR pszFmt);
前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
wnsprintf(dest,MAX_SIZE-1,pszFmt);
......
22.wsprintfW - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用intwnsprintf(LPTSTR dest ,int n, LPCTSTR pszFmt);
前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
wnsprintf(dest,MAX_SIZE-1,pszFmt);
......
23.vsprintf - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用int_vsnprintf(char *dest ,size_t n, const char*format, va_list argptr);
前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
char dest[MAX_SIZE];
memset(dest,0,MAX_SIZE);
_vsnprintf(dest,MAX_SIZE-1,formatstring,args);
......
24.vswprintf - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用int_vsnwprintf(wchar_t *dest ,size_t n, const wchar_t*format, va_list argptr);
前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
wchar_tdest[MAX_SIZE];
wmemset(dest,0,MAX_SIZE);
_vsnwprintf(dest,MAX_SIZE-1,formatstring,args);
......
25.swprintf - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用int_snwprintf(wchar_t *dest ,size_t n, const wchar_t*format[,argument...]);
前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
wchar_tdest[MAX_SIZE];
wmemset(dest,0,MAX_SIZE);
_snwprintf(dest,MAX_SIZE-1,formatstring,args);
......
26._stprintf - 高风险
危险:
它没有安全检查措施,很容易导致缓冲区溢出.
建议:
可以考虑使用int_sntprintf(TCHAR *dest ,siez_t n,const TCHAR*format[,argument...]);
前提是,我们必须清楚写入目标缓存区dest的长度必须小于dest的大小,同时保证函数执行后dest以0结尾.否则还是将会导致不可预料的结果.
例子:
......
TCHAR dest[MAX_SIZE];
memset(dest,0,MAX_SIZE*sizeof(TCHAR));
_sntprintf(dest,MAX_SIZE-1,pszFmt);
......
本文分享自 MySQL从删库到跑路 微信公众号, 前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!