_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安全版函数。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值