sprintf_s 的缓冲区太小

2023-12-30

以下代码会导致错误并终止我的应用程序。这是有道理的,因为缓冲区只有 10 个字节长,而文本有 22 个字节长(缓冲区溢出)。

char buffer[10];    
int length = sprintf_s( buffer, 10, "1234567890.1234567890." ); 

如何捕获此错误以便我可以报告它而不是使我的应用程序崩溃?

Edit:

阅读下面的评论后,我选择了 _snprintf_s。如果它返回 -1 值,则缓冲区未更新。

length = _snprintf_s( buffer, 10, 9, "123456789" );
printf( "1) Length=%d\n", length ); // Length == 9

length = _snprintf_s( buffer, 10, 9, "1234567890.1234567890." );
printf( "2) Length=%d\n", length ); // Length == -1

length = _snprintf_s( buffer, 10, 10, "1234567890.1234567890." );
printf( "3) Length=%d\n", length ); // Crash, it needs room for the NULL char 

这是设计使然。整个点sprintf_s,以及来自的其他功能*_s系列,是捕获缓冲区溢出错误并将其视为违反先决条件。这意味着它们并不是真正可以恢复的。这只是为了捕获错误而设计的 - 你不应该调用sprintf_s如果您知道字符串对于目标缓冲区来说可能太大。在这种情况下,使用strlen首先检查并决定是否需要修剪。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sprintf_s 的缓冲区太小 的相关文章

  • 是否有与 posix_memalign 对应的 C++ 版本?

    当我打电话时posix memalign http man7 org linux man pages man3 posix memalign 3 html为类型的对象分配对齐的内存Foo在我的 C 代码中 我需要做一个reinterpret
  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • 在c#中执行Redis控制台命令

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有

随机推荐

  • Context.startServiceAsUser() 在哪里?

    亲爱的所有 Android 专家 目前 我获取了一个开源 Android 项目 wso2 代理 该项目需要在 Context 类中使用 API startServiceAsUser 然而 android studio无法识别这个API 我该
  • 我可以在不使用 eval 的情况下编写这个宏吗?

    我正在尝试编写一个宏来捕获 Clojure 中的编译时错误 具体来说 我想捕获调用尚未针对该数据类型实现的协议方法时抛出的异常 并且clojure lang Compiler CompilerException被抛出 到目前为止我有 def
  • nf_conntrack_helper_register返回错误

    在内核中 如果我想重新启动我的 conntrack 寄存器 nf conntrack helper unregister sip i j redefinition of the sip i j parameters nf conntrack
  • 递归函数接受方案中的列表

    我是计划新手 这是我的第一个函数式语言 递归地实现几乎所有事情对我来说似乎都很尴尬 尽管如此 能够实现具有单个整数输入的阶乘和斐波那契问题的函数 但是 当您的函数有列表输入时该怎么办 假设这个练习 功能 ret10 提取并以列表形式返回所有
  • 如何从 MacOS 的照片库获取所有 PHAsset

    我想使用以下命令解析 MacOS 照片库中的所有图像PHAsset https developer apple com documentation photos phasset language objc 然而 我发现的所有示例仅适用于 i
  • 如何使用 jquery $.get() 发送参数

    我正在尝试执行 jquery GET 并且我想发送一个参数 这是我的功能 function var availableProductNames get manageproducts do option 1 function data ava
  • 如何在 Java 中生成相当于 Python 示例的 HMAC?

    我正在考虑实现一个应用程序Twitter 通过 Oauth 授权 http apiwiki twitter com Authentication在爪哇 第一步是获取请求令牌 http apiwiki twitter com Twitter
  • 比较 EL 中的字符串[重复]

    这个问题在这里已经有答案了 我向 JSP 提供一个 User 对象 并希望将用户的属性与给定的字符串进行比较 我现在正在做的事情如下
  • Ruby,混合实例变量和方法

    我有两个文件 一个带有模块ToMix module ToMix module var modulevar def self mix function puts mix function SELF module var end def mix
  • 尝试解密时出现错误密钥 CryptographicException

    我使用命令创建以下文件 makecert n CN TEST CER sv Test pvk r sky echange pe test cer pvk2pfx pvk Eltapk pvk spc test cer pfx test pf
  • 对浮点数进行四舍五入 bash

    好的 所以我正在尝试对输入进行四舍五入17 92857 这样它就可以得到输入17 929在bash中 到目前为止我的代码是 read input echo scale 3 input bc l 但是 当我使用它时 它不会四舍五入 而是返回1
  • SELECT 字段列表中的 CONCAT() 函数

    我正在使用 CodeIgniter 的活动记录功能 但无法选择我感兴趣的数据 我想要被选中的是 CONCAT t field1 t field2 AS finalValue 所以我添加这个 this gt db gt select CONC
  • 使用 Gson 序列化的 RealmObjects 的组合继承

    出于各种原因 我正在考虑将 Realm 作为数据库解决方案 但目前最大的问题是 Nougat 中抛出的 TransactionTooLargeException 已经做到了这一点 所以我必须基于 ActiveAndroid 重新设计我当前的
  • 如何将聚合与列名列表一起使用

    你如何抽象aggregate在函数中通过传递条件和值列表来总结 This works fine x lt data frame cond1 sample letters 1 3 500 replace TRUE cond2 sample L
  • 关于[NSNull null]的一些困惑,nil [重复]

    这个问题在这里已经有答案了 可能的重复 NSNull null 和 nil 有什么区别 https stackoverflow com questions 836601 whats the difference between nsnull
  • str_replace() 与关联数组

    您可以将数组与 str replace 一起使用 array from array from1 from2 array to array to1 to2 text str replace array from array to text 但
  • 无法在 Android 上的 WebView 中下载 Blob 文件类型

    我想从 webview 下载文件 但每次都会出错 只能下载 HTTP HTTPS URI blob https https 我在我的代码中使用这个 ngOnInit let webview WebView this webViewRef n
  • CPython 中的模块加载是如何工作的?

    CPython 中的模块加载在幕后是如何工作的 特别是 用 C 语言编写的扩展的动态加载是如何工作的 我可以在哪里了解这方面的信息 我发现源代码本身相当令人难以承受 我可以看到那个值得信赖的人dlopen 和朋友在支持它的系统上使用 但没有
  • $string.Substring 索引/长度异常

    我正在执行以下操作来尝试从字符串中获取最后一个字符 在本例中为 0 string HKEY LOCAL MACHINE SYSTEM CurrentControlSet services hid Parameters 0 parameter
  • sprintf_s 的缓冲区太小

    以下代码会导致错误并终止我的应用程序 这是有道理的 因为缓冲区只有 10 个字节长 而文本有 22 个字节长 缓冲区溢出 char buffer 10 int length sprintf s buffer 10 1234567890 12