如何从静态数组复制到动态分配的内存
How to copy from static array to dynamically allocated memory
为什么 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
您在 memcpy
中忘记了 sizeof
memcpy(b, a, LEN * sizeof *b);
正如@tsanisl 在评论中指出的那样,LEN * sizeof *b
与 sizeof a
相同,因此您可以做到:
double* b = malloc(sizeof a);
memcpy(b, a, sizeof a);
另请注意,void main()
不是 main
的有效签名。应该是 int main()
.
为什么 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
您在 memcpy
sizeof
memcpy(b, a, LEN * sizeof *b);
正如@tsanisl 在评论中指出的那样,LEN * sizeof *b
与 sizeof a
相同,因此您可以做到:
double* b = malloc(sizeof a);
memcpy(b, a, sizeof a);
另请注意,void main()
不是 main
的有效签名。应该是 int main()
.