|
|
1
3
您可能遇到缓冲区溢出。
像
溢出的部分是
您的堆栈可能如下所示:
这个
因为有一个
|
|
|
2
2
这
|
|
3
1
尽管您没有明确地
很多内存通常都是零/
这就解释了为什么您成功地将字符串复制到
您的复制函数是错误的,因为它“认为”它的复制数组
何时应该复制的数组
|
|
|
4
1
它是有效的,因为while循环不是在做逻辑运算,而是在做一个旁白。 因此,只要给定的值为真,就需要经过循环很长时间。(只要它不是零)所以当到达“\0”(whats 0)时它就终止了。 即使没有“\0”,它也可能在任何时候终止(具有未定义的行为),因为在离开边界后,出现任何零值字节的可能性都很大。但是在离开数组边界之后,程序的行为可以是任何东西。(它甚至可以让鼻龙产卵;) b不打印任何内容的原因可能是基于Byte顺序,因为您正在将int值写入Byte数组,所以可能是Byteorder的第一个Byte放在第一个字节中,并且是0,所以从外部来看,它将被视为“\0”,即使您的目的是将整个int视为一个符号,而不是4个单个值。 附言:这甚至会打破严格的别名规则。 |
|
|
5
1
最好检查一下 到 或 从…起 在下面的while循环之前为NULL。
对于您的问题: 1.循环终止,因为在 一 等于0(或“\0”),这是未定义的。 2. 一 打电话后可能会更改或不更改 复制 这也是未定义的。两个变量都存储在 一 以及位置 b 在生效时存储。在上述nemo的情况下, 一 功能后突变 复制 被处决。 为了安全起见,请始终在字符数组的末尾插入一个“\0”。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |