gpt4 book ai didi

调用 memcpy 并将 num 设置为比需要更多的字节

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:43 25 4
gpt4 key购买 nike

考虑以下 C 代码:

#define SIZE_A // >= SIZE_B
#define SIZE_B
#define SOME_SIZE // > SIZE_B

int main() {
int a[SIZE_A];
int b[SIZE_B] = {0};
memcpy(a, b, sizeof(int)*(SOME_SIZE));
return 0;
}

假设 SIZE_A、SIZE_B 是一些整数且 SOME_SIZE > SIZE_B 且 SIZE_A>=SIZE_B。如果出现以下情况会有什么后果:

a. SOME_SIZE < SIZE_A
b. SOME_SIZE = SIZE_A
c. SOME_SIZE > SIZE_A

我试着用一些值来运行它,但不明白是否有任何恒常性。谢谢

最佳答案

在您的情况下(因为您正在复制起始地址 ab ),它必须包含 SOME_SIZE <= SIZE_A AND SOME_SIZE <= SIZE_B 否则它是 undefined behaviour

简单来说,您从源复制到目标的字节数永远不应从源您指定为 memcpy 的目标地址开始的可用字节数.例如,如果在您的情况下您要从数组 b 的中间复制,则您将不得不进一步缩小 SOME_SIZE 的界限 - 因为从 b 的中间开始,可用字节甚至比 SIZE_B 更少。

关于调用 memcpy 并将 num 设置为比需要更多的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35724137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com