我有一个指针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
中的实际信息。
答案 0 :(得分:1)
将记忆从A [2到n]复制到C [2到n](来自问题)
A
是char **
,它指向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