为什么 strncpy 被标记为不安全?

2023-11-21

我收到警告:

warning C4996: 'strncpy': This function or variable may be unsafe. Consider using  strncpy_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
F:\vuStudio\VC\include\string.h(188) : see declaration of 'strncpy'

我在 stackoverflow.com 上读到strcpy不安全,我应该使用strncpy反而。但现在为什么我收到 strncpy 不安全的警告?

我将其称为:

strncpy(this->title, title.c_str(), sizeof(this->title));

strncpy有一些危险的怪癖。

首先,它将复制结束后的目标缓冲区清零,这可能会令人惊讶。

其次,如果目标缓冲区没有足够的空间,它会notnull 终止目标缓冲区。

第三,如果它被截断,那么它“大部分有效”。这会阻碍错误处理(截断的字符串通常比无用更糟糕,但不appear乍一看比无用更糟糕)。

strncpy_s需要输入长度(或显式截断请求),如果没有足够的空间来空终止(在输出中仅写入零长度字符串),则会出现错误。有时提供输入长度的效率很低(并且某些更改不需要),但即使在错误情况下,它也能保证以 null 结尾的输出缓冲区(只要它不是 nullptr 或零长度)。我不确定它是否在复制的字符串末尾归零。

此行为可以防止或减轻字符串代码中的一些常见栅栏错误。

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

为什么 strncpy 被标记为不安全? 的相关文章

  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 以秒为单位的反应日期选择器时间选择

    我还需要从反应日期选择器中选择秒 我浏览过文档发现了这个 在此解决方案中 我可以从中选择小时 分钟 上午 下午 但没有秒选项 有什么方法可以自定义也从中选择秒 需要帮助 如下例 查找输入时间 我尝试过更改日期格式 dateFormat MM
  • 如何在 Swift 的 Xcode 6 的 Storyboard 中成功添加图像?

    我对 Xcode 非常陌生 2 天 到目前为止我发现它相当令人沮丧 我只是想通过 Storyboard 将图像添加到我的应用程序的 ViewController 但它不会出现在模拟器上 有人可以帮助我吗 如果您正在尝试 XCode 的示例项
  • 彩色输出打破了 readline 的换行

    我正在使用 Ruby 中的 readline 对一些输出进行着色 但我没有运气让换行正常工作 例如 e 01 32mThis prompt is green and bold e 00m gt 期望的结果是 This prompt is g
  • 使用 csv 和 quantmod 加载多个符号

    我正在尝试使用 csv 文件加载多个符号 而不是从雅虎下载 原始代码运行良好并且使用 load packages quantmod tickers spl TLT IWM GLD data lt new env getSymbols tic
  • MySQL - 从多个具有相同结构但不同数据的表中选择数据

    好吧 这是我的困境 我有一个数据库 其中设置了大约 5 个表 所有表都具有完全相同的数据结构 以这种方式分离数据是为了本地化目的 并划分总共约 450 万条记录 大多数时候只需要一张桌子 一切都很好 但是 有时需要来自 2 个或更多表的数据
  • Node.js NODE_PATH 环境变量

    在开发过程中我曾经WebStorm node path 环境变量 我在项目设置的启动中设置了一个变量 现在我想尝试在服务器上运行该项目 但不知道如何在那里设置这个变量 帮忙解决问题 假设它是 UNIX 或 Mac OS X 服务器 请使用e
  • 无法从 Moto 360 读取心率传感器 - Android Wear

    有人成功读取 Moto 360 的心率传感器吗 mSensorManager SensorManager getSystemService SENSOR SERVICE mHeartRateSensor mSensorManager get
  • NSNotificationCenter 和安全多线程

    鉴于即使方法调用正在进行中 对象也可能被释放 link 对象注册并接收将在与其预期释放的线程不同的线程上传递的通知是否安全 作为参考 文档指出 在多线程应用程序中 通知始终在发布通知的线程中传递 该线程可能与观察者注册自身的线程不同 同样重
  • 空间局部性与时间局部性

    我理解这些术语的定义 但我无法将它们的概念应用到代码中 在练习中 我们需要描述以下代码是空间代码还是时间代码 for int i 0 i lt 10 i printf some array i 我觉得这是空间局部性 因为当访问数组的一个索引
  • Spring Boot 2 禁用具有多个数据源的自动提交 Hikari

    我正在尝试关闭 Hikari 上具有多个数据源的自动提交 但我没有任何运气 我正在使用 Spring Boot 2 2 0 3 RELEASE 这是我的配置 应用程序属性 spring datasource primary driver c
  • 如何在 Laravel 中过滤多对多结构

    我有多对多的用户和角色结构 users id name roles id name 角色 用户 user id role id Model User php public function roles return this gt belo
  • jq 是否已安装并在 PATH 上可用?

    我正在尝试读取 gitlab CI 中的 yaml 文件 我安装了jq 1 0 2 and yq 2 10 1 using pip在我的 CI 工作中 我使用 python 3 7 图像 当我尝试读取 yaml 文件时 出现错误 yq Er
  • 如何为 S3 对象创建 java OutputStream 并向其写入值?

    使用 AmazonS3 类中的方法将内容添加到 S3 文件的现有方法有 通过带有输入流的 putObject 创建包含内容的本地文件并将其上传到 S3 有没有办法为现有的 S3 对象创建一个 OutputStream 可以将列表中的值写入其
  • 当 SCREEN_ON 接收器被触发时,如何禁用键盘防护并向用户显示活动?

    当 screen on 激活广播接收器时 如何禁用键盘保护 以便当它发生时用户可以看到我在其后面启动的活动 活动已经开始 我一直在尝试从屏幕关闭触发的广播接收器中执行以下代码 KeyguardManager myKeyGuard Keygu
  • .NET 正则表达式中的 \d 与 [0-9] [重复]

    这个问题在这里已经有答案了 我经常看到 0 9 用于 Stack Overflow 上的 NET 正则表达式答案 而不是 d 我问过为什么 答案往往是 d匹配的不仅仅是 0 9 那么它还匹配什么呢 这张表说它匹配十进制数字 那么呢 p Nd
  • Maven 安装插件:参数文件丢失或无效

    我有一个本地 jar 我想在我的项目中使用它 有很多方法可以做到这一点 只需手动安装到本地存储库中 使用父 pom 中的脚本进行安装 使用系统范围 使用本地存储库声明 我决定使用 Maven Install 插件将 jar 安装到存储库中
  • gcc 编译标志

    谁能解释一下为什么我们在 gcc 中使用 m 标志 我运行 man gcc 命令结果很不清楚 任何人都可以解释一下这个标志在编译中的作用吗 如何使用 m 标记其正确的语法 我需要它 因为我正在通过 make 命令运行自动生成的 makefi
  • Web API ModelBinders - 如何以不同方式绑定对象的一个​​属性

    我有以下操作签名 ValidateInput false public HttpResponseMessage PostParam Param param Param 看起来像这样 public class Param public int
  • 非静态方法 PEAR::isError() 不应静态调用

    从 RHEL 5x 升级到 CentOS 6x 后 我开始在 httpd 日志中看到以下错误 PHP 严格标准 非静态方法 PEAR isError 不应该 在 web sites blah somescript php 第 33 行静态调
  • 为什么 strncpy 被标记为不安全?

    我收到警告 warning C4996 strncpy This function or variable may be unsafe Consider using strncpy s instead To disable deprecat