![]() |
1
26
解决第一个问题的方法是使用
第二个问题的解决方案是给
(您可以使用
|
![]() |
2
10
你的两个断言都是正确的。
这对调试来说可能特别讨厌。
所有这些都导致许多C++开发者得出这样的结论:你永远不应该使用。
…对于那些像我一样仍然喜欢使用
|
![]() |
3
4
是的,主要是缓冲区溢出的问题。然而,这些是当今相当严重的事务,因为缓冲区溢出是系统破解者用来绕过软件或系统安全的主要攻击向量。如果你把这样的东西暴露给用户输入,你很有可能把程序(甚至你的计算机本身)的密钥交给破解者。
现在让我们假设有人恶意传递给我们的web浏览器一个比我们选择的缓冲区大得多的字符串。他的额外数据将覆盖附近的数据。如果他把它做得足够大,他的一些数据将通过Web服务器的指令而不是数据被复制。现在他可以让我们的网络服务器执行了 他的密码 . |
![]() |
4
3
你的两个结论是正确的,但不完整。
在这里,
|
![]() |
5
1
你的解释似乎是对的。然而,您的案例2并不是真正的缓冲区溢出。这更像是内存访问冲突。不过,这只是个术语,仍然是个大问题。 |
![]() |
6
1
|
![]() |
7
0
请记住,sprintf()在每个字符串的末尾添加ascii0字符作为字符串终止符,这一点非常重要。因此,目标缓冲区必须至少有n+1字节(要打印单词“HELLO”,需要6字节的缓冲区,而不是5字节的缓冲区)
还要注意,sprintf()的返回值不包括null终止字符。在上面的示例中,写入了2个字节,但函数返回“1”。
|
![]() |
8
0
我已经给出了一个小示例,说明了如何为 把格式数据写成串 (当然,如果你愿意的话!)而且没有 snprintf公司 悬而未决。。。。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |