C - Memcpy 不工作

标签 c memcpy

首先,了解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/

相关文章:

c - 本书 "c program. lang."版本 2 中的电源程序,循环

objective-c - %qx 格式说明符是什么意思

c++ - 如何在 C++ 中连接两个结构类型变量?

c++ - 在程序结尾处在0x0037A5C2 project.exe上引发了异常:0xC0000005:访问冲突写入位置0xDDDDDDDD

arrays - 使用 mexCallMATLAB 时避免复制数组

c++ - memcpy 从 char 数组到结构体

c - 结构内部的结构数组

c - 如何使用箭头键和 Enter 按钮选择数字

c - 除零错误?

c++ - 如何手动分配 vector 的大小?