码迷,mamicode.com
首页 > 其他好文 > 详细

_tcscat在Debug和Release下的问题

时间:2015-03-17 00:49:12      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:tcscat

背景
有如下这么一段代码,作用是获取当前程序的所在路径(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下的问题

标签:tcscat

原文地址:http://blog.csdn.net/deadwalk/article/details/44318517

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!