问题标签 [tr24731]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 您是否使用 TR 24731 的“安全”功能?
ISO C 委员会 ( ISO/IEC JTC1/SC21/WG14 ) 已发布TR 24731-1并正在研究TR 24731-2:
TR 24731-1:C 库扩展第一部分:边界检查接口
WG14 正在研究更安全的 C 库函数的 TR。此 TR 旨在修改现有程序,通常通过添加带有缓冲区长度的额外参数。最新的草案在文件 N1225 中。文件 N1173 中有一个基本原理。这将成为技术报告类型 2。
TR 24731-2:C 库的扩展 - 第 II 部分:动态分配函数
WG14 正在研究更安全的 C 库函数的 TR。此 TR 面向使用动态分配而不是缓冲区长度的额外参数的新程序。最新草案在文件 N1337 中。这将成为技术报告类型 2。
问题
- 您是否使用支持 TR24731-1 功能的库或编译器?
- 如果是这样,哪个编译器或库以及在哪个平台上?
- 您是否因为修复代码以使用这些功能而发现任何错误?
- 哪些功能提供最大价值?
- 有没有提供没有价值或负价值的东西?
- 您打算将来使用图书馆吗?
- 您是否在跟踪 TR24731-2 的工作?
c - 初学者的 scanf_s() 残疾
我知道 scanf_s() 有一些奇怪的地方,但我无法解决这个问题。我的代码通过使用 scanf() 运行良好,但这不会反转数组的元素:( 任何帮助将不胜感激。谢谢。
c++ - 为什么我不能使用 fopen?
在我之前询问过的关于所谓的安全库弃用的问题中,我发现自己同样对为什么fopen()
应该弃用感到困惑。
该函数接受两个 C 字符串,并返回一个 FILE* ptr,或在失败时返回 NULL。线程安全问题/字符串溢出问题在哪里?或者是别的什么?
提前致谢
c - sprintf_s 的缓冲区太小
以下代码会导致错误并终止我的应用程序。这是有道理的,因为缓冲区只有 10 个字节长,而文本是 22 个字节长(缓冲区溢出)。
如何捕获此错误,以便我可以报告它而不是让我的应用程序崩溃?
编辑:
阅读下面的评论后,我选择了 _snprintf_s。如果它返回 -1 值,则缓冲区未更新。
c - sprintf_s 未在此范围内声明
我有一个使用sprintf_s
. 它在 Windows 中运行良好,但是当我在 Linux 中编译我的代码时,它给出了这个错误:
为什么会发生这种情况,我该如何解决?
c++ - 像“wcstok”这样的警告:这个函数或变量可能不安全。考虑改用 wcstok_s
我只是在我的代码中使用这些宽字符文字来了解它们
为什么我会收到这些警告,无论如何我都忽略了它。我们是否需要忽略任何此类警告。
input - Scanf_s 警告?跳过用户输入(主题:Runge-Kutta、流行病模拟)
这是我的第一篇文章,我不得不承认,我在编程方面很糟糕。我是班上那个拼命工作的人,但似乎永远无法像其他同学一样掌握编程。所以请友善,我将在下面尝试解释我的问题。
我有以下代码(已删除注释),但是当我运行它时,我收到类似于下面列出的警告。另外,当我运行程序时,允许第一个用户输入的值,但突然之间,它跳到程序的末尾,不允许我输入其他变量的值(例如变量“beta” )。我有输出图像(http://i.stack.imgur.com/yc3jq.jpg),您可以看到我输入了 alpha,但随后程序运行到最后。有什么想法吗?
非常感谢您的帮助!-斯宾塞
- - - - - - - - - - - - - - -代码 - - - - - - - -
示例警告:
c - 是否有 strcpy_s 和/或 TR24731-1 的免费实现?
我有一个混合 C 和 C++ 的旧项目。它广泛使用 C 字符串和strcpy
, strcat
,strncpy
等strncat
。我发现了许多缓冲区溢出,我想使用更安全的函数,例如strcpy_s
. MSVC 包括这些功能,但我需要一些可以在各种平台上运行的东西——至少是 linux、osx 和 windows。
我确实知道strlcpy
,但正如很多人所指出的(示例),这确实不是一种改进。
strcpy_s
那么: ,strcat_s
等或整个 ,是否有任何免费实现TR24731-1
?
我需要的东西是public domain
or BSD
,但如果您知道其他许可证下的实现,请继续列出它们 - 我相信其他人会受益。
c - C 中 memcpy 的最佳实践
它在 GNU 中是否与 Microsoft C 运行时一样被弃用?
如果 GNU C 中有这样的弃用,89/90 之后的 C 标准或编译器是否强制执行弃用?
如果它是 GNU C 编译器,它从什么时候开始提供像Microsoft C
memcpy_s
中已弃用的那样安全的替代内存操作功能?memcpy
如果它是 89/90 之后的 C 标准,它从什么时候开始提供像Microsoft C
memcpy_s
中已弃用的那样安全的替代内存操作功能?memcpy
mem
如果在 GNU C 运行时中没有这样的弃用,是否有一个函数既不在那些内存操作(名称bcopy
以目的地?如果有/有,你能列出尽可能多的吗?
c - 对gets_s的未定义引用?
我使用以下命令在 Ubuntu 4.6.1 和 SUSE 4.6.2 上使用 gcc
我的源代码是
详细说明我的问题:
对我来说,主要问题是行输入和保存的行之间的一一对应关系。
成功时,fgets 和 gets_s 之间的区别在于 fgets 包含换行符终止符,而 gets_s 将换行符终止符替换为空终止符,以便在行输入和成功调用 gets_s 之间保持一一对应。
对于溢出缓冲区长度的输入,fgets 接受适合缓冲区的字符数,并将其余字符留在输入缓冲区中以供下一个 fgets 使用。
标准(K.3.5.4.1)规定,gets_s(与gets不同)需要在n-1个字符内出现换行符、EOF或读取错误。因此溢出是违反运行时约束的。如果存在运行时约束违规,则将缓冲区中的第一个字符设置为空字符,并读取并丢弃 stdin 输入缓冲区中的字符,直到读取换行符为止,发生文件结尾或发生读取错误。
因此,在成功时,我期望:
溢出时,我预计 fgets 和 gets_s 的行为会有所不同。换句话说,
请注意我希望 gets_s 如何完全删除第一行输入的内容。
如果主要问题是输入行和保存行之间的一一对应关系,这在调试中很重要,我们仍然需要编写自己的函数(类似于 K&R 的 getline)
使用这样的函数,保持一一对应,缓冲区饱和并且没有运行时约束违规。
我得出这个结论是否正确。