【问题标题】:How to copy from static array to dynamically allocated memory如何从静态数组复制到动态分配的内存
【发布时间】:2021-11-16 07:53:06
【问题描述】:

为什么b 不持有1., 2.

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

#define LEN 2

void main() {
    double a[LEN] = {1, 2};
    double* b = malloc(LEN * sizeof(*b));

    memcpy(b, a, LEN);
    for (size_t i = 0; i < LEN; i++)
    {
        printf("%.2f ", b[i]);
    }
    printf("\n");
}

相反,我得到了

> gcc code.c                                                                                                                                                         
> ./a.out                                                                                                                                                                                   
0.00 0.00 

【问题讨论】:

标签: c memcpy


【解决方案1】:

您忘记了memcpy 中的sizeof

memcpy(b, a, LEN * sizeof *b);

正如@tstanisl 在 cmets 中所指出的,LEN * sizeof *bsizeof a 相同,所以你可以做到:

double* b = malloc(sizeof a);
memcpy(b, a, sizeof a);

还要注意void main() 不是main 的有效签名。应该是int main()

【讨论】:

  • 我刚刚意识到。提示这些愚蠢错误的自动结对程序员工具在哪里?
  • @fhchl LOL :-D 是的,我自己也需要其中一个。
  • 使用memcpy(b, &amp;a, sizeof a);会更简单,更不容易出错
  • @tstanisl &amp;a 生成 double(*)[LEN] 而不是 double*。我发现后者更清晰/更简单。我可以在一定程度上同意sizeof a,但我选择*b 是为了与malloc 保持一致。
  • @fhchl gcc -Wall -Werror 可以帮助解决其中的一些问题。
猜你喜欢
  • 2014-10-03
  • 2021-04-01
  • 1970-01-01
  • 2012-05-21
  • 2018-09-06
  • 1970-01-01
  • 2013-11-10
  • 2016-02-01
  • 2014-10-12
相关资源
最近更新 更多