gpt4 book ai didi

C - Memcpy 不工作

转载 作者:行者123 更新时间:2023-11-30 18:25:24 25 4
gpt4 key购买 nike

首先,了解memcpy是如何工作的:第三个参数是复制的字节数,但是,我仍然有问题......

这是我的结构:

#define ARRONDI(X, Y) 1 + (X / (Y + 1))
#define Taille ARRONDI(Max_Length, 64)
#define Max_D 7
typedef unsigned long long ull;

typedef struct{
ull List[Taille];
ull best_solution[Taille];
ull Dist[Taille];
int borne;
int Length[Max_D-1];
int nb_mark;
}tache_t;

Taille 和 Max_D 都是之前定义的宏。当我有 2 个 tache_t、a 和 b,并且我想将“best_solution”数组从一个复制到另一个时,所以我输入

#include <string.h>
int main(){
int i;

tache_t t;
t.best_solution[0] = 52461701;
t.best_solution[1] = 0;

ull T[Taille];
memcpy(T, t.best_solution, sizeof(ull) * Taille);

for(i=0; i<Taille; i++)
printf("%Lu vs %Lu\n", T[i], t.best_solution[i]);

return 0;
}

但是当我检查值时,两个数组都有点不同......怎么可能??

我想知道这是否是一个填充问题......但显然不是,对吧?

最佳答案

啊哈!如果您仅通过预处理器运行代码(使用 gcc 的 -E 选项),您将看到 memcpy 行解析为:

memcpy(T, b.best_solution, sizeof(ull) * 1 + (Max_Length / (64 + 1)));

宏是文本替换。在您的情况下,您可以通过将整个表达式放在括号中来防止错误替换:

#define ARRONDI(X, Y) (1 + (X / (Y + 1)))

如果您希望宏在所有情况下都有效,请在参数两边加上括号:

#define ARRONDI(X, Y) (1 + ((X) / ((Y) + 1)))

关于C - Memcpy 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30166478/

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