[C/C++]记录:使用sprintf_s时第二个参数不严格计算导致栈损坏
(1)使用sprintf_s时第二个参数不严格计算导致栈损坏的情况
这段代码之前便是函数的定义变量的部分。
此处没有严格计算第一个参数指向的字符串的可用长度。
查看局部变量,发现在函数开头初始化为0的int型变量x1,y1的值改变了,即栈损坏了。
我咨询了大佬:
调试程序时,如果发生了栈损坏,只会在调用损坏的栈或者弹栈时报错。
这解释了,当我不严格计算的时候,为什么在退出函数(弹栈)的时候才有报错。
(2)使用sprintf_s时第二个参数严格计算
如图,一切正常
(3)与大佬关于sprintf_s第二个参数的讨论
我:我突然有点搞混了
我:第二个参数,我之前又说是要传入的长度,现在又说是可利用的长度
大佬:呃严格来说是内部缓冲区的最大长度
大佬:它做两件事
大佬:第一件事是开一个定长的内部缓冲区并且写进去
大佬:第二件事是memcpy过去
大佬:(在release模式下会直接把你传进去的指针当做缓冲区)
大佬:所以…它唯一的保证就是写入长度不超过第二个参数
大佬:就是第二个参数代表最多能写多少
我:所以,本质上还是第一个作为参数的字符串可利用的长度,只是可以用要传入字符串的长度来表示。当已经传入了一个字符串的情况下,用第一个作为参数的字符串的,可利用的长度,是更保险的……吧。
[C/C++]记录:使用sprintf_s时第二个参数不严格计算导致栈损坏相关推荐
- MySQL 当记录不存在时insert,当记录存在时update
MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的 ...
- mysql 主机不存在_MySQL 当记录不存在时插入,当记录存在时更新
MySQL 当记录不存在时插入,当记录存在时更新 2012-1-30 17:58 Monday 分类:MySQL 评论(71) 浏览(21592) MySQL 当记录不存在时插入,当记录存在时更新 网 ...
- MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)...
MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...
- 记录使用websocket时因为Sec-Websocket-Protocol遇到的一个问题
前言 最近在做的项目中用到了websocket,在谷歌浏览器中显示正常,别人在百度浏览器打开,没有数据显示,百度浏览器是ie内核,开始时先想到的是websocket的兼容性,结果证实websokcet ...
- mysql插入实现存在更新_mysql 记录不存在时插入 记录存在则更新的实现方法
mysql 记录不存在时插入在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问 ...
- PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结
转载地址:http://www.51-n.com/t-4264-1-1.html PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳.在高并发或者间隔时长极短(如循环 ...
- 记录--Spyder打开时出现“An error occurred while starting the kernel“
记录–Spyder打开时出现"An error occurred while starting the kernel" 使用Spyder时出现"An error occu ...
- C++ primer读书记录包括第一部分和第二部分 第二十二次更新2021.9.10
需要对程序进行恰当的缩进保持程序的可读性 第一章 开始 cout<<c1<<endl;可以视为(cout<<c1)<<endl; cin>> ...
- 记录版本更新安装时解析包报错
记录版本更新安装时解析包报错 2020-07-09 17:05:52.785 24157-24213/? W/OPInstallStaging: Error staging apk from cont ...
最新文章
- 干货丨人工智能、机器学习和认知计算入门指南
- WebService安全 身份验证与访问控制
- 【Groovy】MOP 元对象协议与元编程 ( 方法合成 | 动态注入方法 )
- c++ 句柄 计算控件坐标_练习答案|| 计算机基础第【28】期
- 实战:Nginx + FastCGI 程序(C/C++) 搭建高性能web server
- 列举mysql的所有触发器以及删除触发器
- 使用Kubeadm创建k8s集群之部署规划(三十一)
- 每日一笑 | 为什么Python比Java更受欢迎?
- 插图 引用 同一行两个插图_数学身份的优雅LED插图
- 《那些年啊,那些事——一个程序员的奋斗史》——65
- [CMake] find_package 指定路径
- Tomcat内存溢出,解决方法
- MySQL 入门(六)—— 索引
- Linux绚丽屏保xscreensaver安装
- C++ 函数其实可以不用写返回值的声明!
- Linux下和编译器、程序的运行、环境变量等相关的常见问题
- vue视频播放插件vue-video-player
- wamp环境二次配置
- 数据结构-中序遍历二叉树(基于C++)
- 湖中剑 前端周刊 #13 | Web录屏、Bundleless、低代码 Deco、Bundle Scanner、RN 低功耗蓝牙