tcscat在Debug和Release下的问题

背景: 有如下这么一段代码,作用是获取当前程序的所在路径(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.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安全版函数。

,要铭记在心;每天都是一年中最美好的日子

tcscat在Debug和Release下的问题

相关文章:

你感兴趣的文章:

标签云: