_tcscat在Debug和Release下的问题
上一篇 /
下一篇 2015-04-27 20:39:50
/ 个人分类:C\C++
背景:
有如下这么一段代码,作用是获取当前程序的所在路径(C:\work\A.exe),然后将”A.exe”去掉,拼装为”C:\work\inject.dll”
TCHAR szDllPath[MAX_PATH] = _T("");
TCHAR szExePath[MAX_PATH] = _T("");
GetModuleFileName(GetModuleHandle(NULL), szExePath, MAX_PATH);
int nIndex =0;
int i = lstrlen(szExePath);while(i >0)
{if(szExePath[i] == _T('\\'))
{
nIndex = i;break;
}
i--;
}for(i =0; i < nIndex +1; i++ )
{
szDllPath[i] = szExePath[i];
}
_tcscat(szDllPath, _T("InjectDll.dll"));
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
问题:
1.Debug模式下运行,得到的结果是预期的"C:\\work\\inject.dll"。
2.Release模式下运行,得到的结果却是"C:\\work\\",也就是_tcscat函数运行不成功。
结论:
1.发现使用_tcscat可能存在风险问题,换用_tcscat_s就OK了。
2.自从vc2005开始,微软力推_s安全版函数以取代不安全的标准非_s版函数,例如:strcat_s、strcopy_s、sprintf_s、_tcsnset_s、_tcsset_s、_tcstok_s...等等
3.代码静态走查是可以关注字符串运算是否使用了_s安全版函数。
收藏
举报
TAG: