来自c中的双指针的Memcpy

时间:2014-02-27 18:15:19

标签: c pointers memcpy

我有一个指针A,它被传递到一个带地址的函数,比如myfunc(&A)

在函数myfunc(char **A) { I want to copy memory from A[2 to n] to C[2 to n] }

我试过memcpy(&c[2], &(*A)[2], 20); 我将地址复制到c而不是A中的实际信息。

2 个答案:

答案 0 :(得分:1)

将记忆从A [2到n]复制到C [2到n](来自问题)

Achar **,它指向char *的数字 第3个char *A[2]。您想在 memcpy 中使用该元素的地址。
所以该行应

memcpy(&c[2], &A[2], N); 

其中 N 根据您的文字(n-2+1)*sizeof(char *) memcpy size参数忽略它复制的类型,因此要提供要复制的内容的总大小。您想要从2复制到n,这会产生n-2+1元素。每个元素都是char *,其大小为sizeof(char *)

- 以下评论 -

虽然问题不明确,但如果您要取消引用A两次,则复制字符...例如

memcpy(&c[2], &A[0][2], 20 /* 20 chars */); 

C将是char *

答案 1 :(得分:0)

memcpy(c+2, *A+2, 20)就足够了。

这是一个测试程序:

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

char c[10] = { 'a', 'b' };

void myfunc(char **A)
{
    memcpy(c+2, *A+2, 8);
}

int
main(void)
{
    char *A = "ABCDEFIJK";
    printf("Before: %s\n", c);
    myfunc(&A);
    printf("After : %s\n", c);
    return 0;
}

执行命令

$ ./a.out 
Before: ab
After : abCDEFIJK