- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在将一些旧的 c 程序转换为更安全的版本。以下功能被大量使用,谁能告诉我他们的安全对应物? Windows 函数或 C 运行时库函数。谢谢。
itoa()
getchar()
strcat()
memset()
最佳答案
itoa()
只要目标缓冲区足够大以接收最大可能的表示(即带有尾随 NUL 的 INT_MIN),它就是安全的。因此,您可以简单地检查缓冲区大小。不过,这不是一个很好用的函数,因为如果将数据类型更改为更大的整数类型,则需要更改为 atol
。 , atoll
, atoq
等等.. 如果你想要一个动态缓冲区来处理你扔给它的任何类型并且维护问题更少,请考虑 std::ostringstream
(来自 <sstream>
header )。
getchar()
没有“安全对应物”——它一开始就不是不安全的,也没有缓冲区溢出的可能性。
回复 memset()
:这是危险的,因为它接受程序员的判断,即在没有确认内容/地址/长度的情况下应该覆盖内存,但如果使用得当,它不会留下任何问题,有时即使在现代 C++ 编程中它也是完成这项工作的最佳工具。要检查此问题的安全问题,您需要检查代码并确保它针对的是合适的缓冲区或要置零的对象,并且长度计算正确(提示:尽可能使用 sizeof)。
strcat()
如果不知道要连接的字符串是否适合目标缓冲区,则可能很危险。例如:char buf[16]; strcpy(buf, "one,"); strcat(buf, "two");
完全安全(但很脆弱,因为进一步的操作或更改任一字符串可能需要超过 16 个字符,编译器不会警告您),而 strcat(buf, argv[0])
不是。最好的替代品往往是 std::ostringstream,尽管这可能需要对代码进行大量修改。你可以使用 strncat()
逃脱,甚至 - 如果你有它 - asprintf("%s%s", first, second)
,这将在堆上分配所需的内存量(请记住 free()
它)。您还可以考虑 std::string 并使用 operator+ 来连接字符串。
关于c++ - itoa() 的安全对应物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4142068/
我想检查我的应用程序或系统中是否存在库。在 Java 中,我通常执行 System.loadlibrary,但是有谁知道 C 中类似的相应调用吗? 最佳答案 是dlopen打开一个库,dlsym 从加
我在 typescript 中输入以下内容 export type Excludable = T & { isExcluded?: boolean } 其中过滤值: export type Filte
我最近在我的应用程序中添加了一种方法,可以自动格式化 TextView ,从“50000”到“50,000”,效果绝对完美。现在我遇到的问题是,在我的应用程序中,有多个按钮功能可以从该 TextVie
SELECT * FROM conversations WHERE chatMembers LIKE '%1%'AND chatMembers LIKE '%10%' 对话表 id | chatMem
我正在编写一个需要将 Java Date() 值保存到 MySQL 数据库的 RESTful Web 服务,但是,我不确定 MySQL 中可以保存 Java Date() 的数据类型是什么,或者我是否
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
同样,在任何 Red Hat 或 JBoss 站点上都没有关于此的信息,所以我在这里问... 我不确定是 13 还是 14。 最佳答案 Mapping the Community versions w
我曾尝试使用 swift 开发一款利用 iPhone 的 3D 触摸硬件的游戏。然而,当我将我的应用程序提交到 App Store 时,它被拒绝了,因为该游戏无法在 iPad 上玩。 我的问题是,
Qt 的有序关联容器对应项 std::map是QMap , std::set是QSet , 对于无序关联容器 std::unordered_map是QHash . 我应该用什么来代替std::unor
JavaScript 方法 String.fromCharCode() 在以下意义上与 Python 的 unichar() 等效: print unichr(213) # prints Õ on t
正如谷歌在 "Discontinuing support for JSON-RPC and Global HTTP Batch Endpoints" 中提到的那样,Google API 客户端库已重新
我正在使用 MapLayer 和 MapOverlay 在 map 中创建自己的路径/折线,GPS 捕获的所有点都存储在一个结构中,以便我可以访问它们。随时。 现在,我希望路径在用户操作 map (缩
我们使用 Adobe Flash Builder 创建由 Flex 提供支持的交互式 Web 应用程序。现在我们正在寻找替代方案,让我们在 UI 设计和迎合 HTML5 的编码方面拥有同样的开发便
我想知道Android/Java 中类似C#/C++ 中的GetTickCount 方法的相应方法吗? 最佳答案 Android 为 SystemClock.uptimeMillis() .请注意,u
我用 Vue + Phaser 开始了新项目,但是当我尝试加载 Assets 时,this.game.load.image 中的“load”和“add”返回“undefined”。我尝试从 JS 文件
我是一名优秀的程序员,十分优秀!