VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 348|回复: 7

[求助] strcpy_s栈引发异常

[复制链接]
38_avatar_middle
online_vip 2191265529 发表于 2018-6-29 00:43:37 | 显示全部楼层 |阅读模式
3驿站币
在执行delete[] outStr;的时候引发异常;
如果把strcpy_s换成strcpy,程序就会正常,这是什么情况
  1. #include <Windows.h>
  2. #include <iostream>

  3. int ConvUnicode2UniStr(WCHAR *pWchar, CHAR *pChar, int iBuffSize)
  4. {
  5.         char subBuff[8];

  6.         int iLength = 0;
  7.         int iMaxLen = wcslen(pWchar);
  8.         for (int i = 0; (i<iMaxLen) && ((iLength + 6) < (iBuffSize - 1)); i++)
  9.         {
  10.                 sprintf_s(subBuff, "\\u%04x", pWchar[i]);
  11.                 strcpy_s(pChar + iLength,iBuffSize, subBuff);
  12.                 iLength += 6;
  13.         }
  14.         return iLength;
  15. }

  16. int main()
  17. {
  18.         WCHAR *dst = L"hello world";
  19.         CHAR *outStr = new CHAR[100];
  20.         ConvUnicode2UniStr(dst, outStr, 100);
  21.         delete[] outStr;
  22. }
复制代码





上一篇:我开个玩笑
下一篇:DialogBox和EndDialog传值

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

74_avatar_middle
在线会员 jiaokai123 发表于 2018-6-29 00:49:06 | 显示全部楼层
本帖最后由 jiaokai123 于 2018-6-29 00:50 编辑

占楼   等会细看

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

38_avatar_middle
ico_lz  楼主| 2191265529 发表于 2018-6-29 00:50:25 | 显示全部楼层
jiaokai123 发表于 2018-6-29 00:49
代码我没全看。  但是delete释放的还是NEW出来的空间  所以不报
等稍后细看之后 再发表新意见。

感谢楼主热心帮助,期待楼主的新意见strcpy_s栈引发异常

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

74_avatar_middle
在线会员 jiaokai123 发表于 2018-6-29 01:22:51 | 显示全部楼层
本帖最后由 jiaokai123 于 2018-6-29 02:03 编辑

我修改了楼主的代码暂时不报错 可以编译可以执行。
这一题 用到了 strcpy与strcpy_s的区别   区别为 strcpy 不会考虑长度的情况 而strcpy_s 考虑了。

目前分析到这里 。 明天反汇编详查....


  1. int ConvUnicode2UniStr(WCHAR *pWchar, WCHAR *pChar, int iBuffSize) 《《修改第二个参数类型为WCHAR
  2. {
  3.         char subBuff[8];

  4.         int iLength = 0;
  5.         int iMaxLen = wcslen(pWchar);
  6.         for (int i = 0; (i < iMaxLen) && ((iLength + 6) < (iBuffSize - 1)); i++)
  7.         {
  8.                 sprintf_s(subBuff, "\\u%04x", pWchar[i]);
  9.                 strcpy_s((char*)(WCHAR*)pChar + iLength, iBuffSize, subBuff);    《《强制转换了下第一个参数
  10.                 iLength += 6;
  11.         }
  12.         return iLength;
  13. }

  14. int main()
  15. {
  16.         WCHAR *dst = L"hello world";
  17.         WCHAR *outStr = new WCHAR[100];《《修改了类型
  18.         ConvUnicode2UniStr(dst, outStr, 100);
  19.         delete[] outStr;


  20.         printf("aaaa\r\n");;
  21.         getchar();
  22. }
复制代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

82_avatar_middle
在线会员 love_cctry 发表于 2018-6-29 09:50:49 | 显示全部楼层
strcpy_s 的第 2 个参数,应该改成 iBuffSize - iLength 就可以了!

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
51_avatar_small Syc + 2 + 2 赞一个!

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-6-29 10:02:11 | 显示全部楼层
love_cctry 发表于 2018-6-29 09:50
strcpy_s 的第 2 个参数,应该改成 iBuffSize - iLength 就可以了!

言之有理!支持!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

01_avatar_middle
在线会员 CPP初学者 发表于 2018-7-1 09:42:45 | 显示全部楼层
不应该吧,这个是安全版本啊

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

40_avatar_middle
在线会员 sky980239749 发表于 2018-7-3 08:35:43 | 显示全部楼层
代码的作用是啥啊

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-8-20 23:21

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表