c - memcpy() 和 memmove() 未按预期工作

标签 c arrays struct

我在处理结构中的结构数组时遇到了这个问题。我正在尝试使用 memcpy 在字典中设置条目数组。我得到了预期值和一些看似随机的整数的混合作为输出。

奇怪的是,我用一些在线编译器尝试了这段代码,它运行良好。我认为这可能与内存区域重叠有关,所以我尝试了 memmove() 但结果是一样的。

我想我可能对 dict 使用了不正确的 malloc,但我不确定。看来我不能将 malloc 用于内部数组或单个元素。如果有任何帮助,我将不胜感激。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
    int i;
} entry;

typedef struct{
    entry e[10];
    int i;
} dict;

dict* d;

void test(dict* di){
    printf("%d\n", di->i);
    int k;
    for (k = 0; k < 10; k ++){
        printf(("%d\n"),di->e[k].i);
    }
}

int main(){
    entry en[10];

    d = malloc(sizeof(d));

    int k;
    for (k = 0; k < 10; k++){
        en[k].i = k;
    }

    d->i = 50; 
    memcpy(d->e, en, 10*sizeof(entry));

    test(d);

    return 0;
}

最佳答案

d = malloc(sizeof(d));

d 是一个dict*sizeof dsizeof(dict*)。看起来你的意思是 sizeof *d

关于c - memcpy() 和 memmove() 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40924156/

相关文章:

javascript - 在 Javascript 中推送对象

Java数组越界-数独

go - 结构中的空字段会消耗内存吗?

c++ - 从辅助线程使用主线程调用方法

c - 对 ev_timer_stop 的 undefined reference

c++ - 不同的 clang 和 gcc 行为与指针

c++ - 有没有办法使用数组填充 vector ?

c - 使用信号量同步进程

visual-c++ - Visual C++ 2008 中的结构成员对齐

c - 为什么我们不能在结构中初始化成员?