(1)使用sprintf_s时第二个参数不严格计算导致栈损坏的情况


这段代码之前便是函数的定义变量的部分。
此处没有严格计算第一个参数指向的字符串的可用长度。
查看局部变量,发现在函数开头初始化为0的int型变量x1,y1的值改变了,即栈损坏了。
我咨询了大佬:
调试程序时,如果发生了栈损坏,只会在调用损坏的栈或者弹栈时报错。
这解释了,当我不严格计算的时候,为什么在退出函数(弹栈)的时候才有报错。

(2)使用sprintf_s时第二个参数严格计算

如图,一切正常

(3)与大佬关于sprintf_s第二个参数的讨论

我:我突然有点搞混了
我:第二个参数,我之前又说是要传入的长度,现在又说是可利用的长度
大佬:呃严格来说是内部缓冲区的最大长度
大佬:它做两件事
大佬:第一件事是开一个定长的内部缓冲区并且写进去
大佬:第二件事是memcpy过去
大佬:(在release模式下会直接把你传进去的指针当做缓冲区)
大佬:所以…它唯一的保证就是写入长度不超过第二个参数
大佬:就是第二个参数代表最多能写多少
我:所以,本质上还是第一个作为参数的字符串可利用的长度,只是可以用要传入字符串的长度来表示。当已经传入了一个字符串的情况下,用第一个作为参数的字符串的,可利用的长度,是更保险的……吧。

[C/C++]记录:使用sprintf_s时第二个参数不严格计算导致栈损坏相关推荐

  1. MySQL 当记录不存在时insert,当记录存在时update

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的 ...

  2. mysql 主机不存在_MySQL 当记录不存在时插入,当记录存在时更新

    MySQL 当记录不存在时插入,当记录存在时更新 2012-1-30 17:58 Monday 分类:MySQL 评论(71) 浏览(21592) MySQL 当记录不存在时插入,当记录存在时更新 网 ...

  3. MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)...

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...

  4. 记录使用websocket时因为Sec-Websocket-Protocol遇到的一个问题

    前言 最近在做的项目中用到了websocket,在谷歌浏览器中显示正常,别人在百度浏览器打开,没有数据显示,百度浏览器是ie内核,开始时先想到的是websocket的兼容性,结果证实websokcet ...

  5. mysql插入实现存在更新_mysql 记录不存在时插入 记录存在则更新的实现方法

    mysql 记录不存在时插入在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问 ...

  6. PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结

    转载地址:http://www.51-n.com/t-4264-1-1.html PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳.在高并发或者间隔时长极短(如循环 ...

  7. 记录--Spyder打开时出现“An error occurred while starting the kernel“

    记录–Spyder打开时出现"An error occurred while starting the kernel" 使用Spyder时出现"An error occu ...

  8. C++ primer读书记录包括第一部分和第二部分 第二十二次更新2021.9.10

    需要对程序进行恰当的缩进保持程序的可读性 第一章 开始 cout<<c1<<endl;可以视为(cout<<c1)<<endl; cin>> ...

  9. 记录版本更新安装时解析包报错

    记录版本更新安装时解析包报错 2020-07-09 17:05:52.785 24157-24213/? W/OPInstallStaging: Error staging apk from cont ...

最新文章

  1. 干货丨人工智能、机器学习和认知计算入门指南
  2. WebService安全 身份验证与访问控制
  3. 【Groovy】MOP 元对象协议与元编程 ( 方法合成 | 动态注入方法 )
  4. c++ 句柄 计算控件坐标_练习答案|| 计算机基础第【28】期
  5. 实战:Nginx + FastCGI 程序(C/C++) 搭建高性能web server
  6. 列举mysql的所有触发器以及删除触发器
  7. 使用Kubeadm创建k8s集群之部署规划(三十一)
  8. 每日一笑 | 为什么Python比Java更受欢迎?
  9. 插图 引用 同一行两个插图_数学身份的优雅LED插图
  10. 《那些年啊,那些事——一个程序员的奋斗史》——65
  11. [CMake] find_package 指定路径
  12. Tomcat内存溢出,解决方法
  13. MySQL 入门(六)—— 索引
  14. Linux绚丽屏保xscreensaver安装
  15. C++ 函数其实可以不用写返回值的声明!
  16. Linux下和编译器、程序的运行、环境变量等相关的常见问题
  17. vue视频播放插件vue-video-player
  18. wamp环境二次配置
  19. 数据结构-中序遍历二叉树(基于C++)
  20. 湖中剑 前端周刊 #13 | Web录屏、Bundleless、低代码 Deco、Bundle Scanner、RN 低功耗蓝牙

热门文章

  1. 岁月划过生命线(从0到阿里)
  2. uwsgi和nginx的故事
  3. Android源码解析:UI绘制流程之测量.md
  4. laravel 命令行输出进度条
  5. 无线电波的入侵第1部分——无线电频率基础与理论
  6. java中计时器的用法Timer和TimerTask的用法__java中利用Timer与TImerTask 计时器间隔执行任务...
  7. 一个memset函数使用时的坑
  8. 再谈Jquery Ajax方法传递到action
  9. 绕过安全沙箱限制加载在线图片
  10. cisco engine memory