C 将字符数组复制到另一个字符数组

C 将字符数组复制到另一个字符数组,c,C,我试图将一个字符数组复制到另一个字符数组,但没有成功。我尝试过将地址从一个直接复制到另一个,如下所示: void include(int id, char name[16]) { int i; for (i = 0; i < SZ; i++) { if (a[i].id == 0) { a[i].id = id; memcpy(&a[i].name, &name, strlen(name)+1);

我试图将一个字符数组复制到另一个字符数组,但没有成功。我尝试过将地址从一个直接复制到另一个,如下所示:

void include(int id, char name[16]) {
int i;

  for (i = 0; i < SZ; i++) {
      if (a[i].id == 0) {
          a[i].id = id;
          memcpy(&a[i].name, &name, strlen(name)+1);
          return;
      }
  }
}
void include(int-id,char-name[16]){
int i;
对于(i=0;i
但显然,它只在这个函数内部起作用。我也试过这样做:但没有成功。
有人能帮我吗?

&name
中删除
&
,它应该会工作。您的函数声明具有误导性;它实际上相当于:

void include(int id, char *name)
编译器假装数组 参数被声明为指针

如果
name
将是一个数组,
name==&name
。但是
name
是指针,所以
name!=&名称

C常见问题解答中有一些问题可能会有所帮助:


&name
中删除
,它应该可以工作。您的函数声明具有误导性;它实际上相当于:

void include(int id, char *name)
编译器假装数组 参数被声明为指针

如果
name
将是一个数组,
name==&name
。但是
name
是指针,所以
name!=&名称

C常见问题解答中有一些问题可能会有所帮助:


什么是
a
?您应该将其更改为:
memcpy(&a[i].name,name,strlen(name)+1)
因为
name
是一个数组,而数组的名称已经是指向第一个元素的指针。如果字符数组以null结尾,为什么不能使用
strcpy
?能否将
a
作为函数
include
的参数?我更喜欢
memcpy
,因为它让您有机会防止两个缓冲区中的溢出。虽然ghe OP并没有这样做……什么是
a
?您应该将其更改为:
memcpy(&a[i].name,name,strlen(name)+1)
因为
name
是一个数组,而数组的名称已经是指向第一个元素的指针。如果字符数组以null结尾,为什么不能使用
strcpy
?能否将
a
作为函数
include
的参数?我更喜欢
memcpy
,因为它让您有机会防止两个缓冲区中的溢出。虽然ghe OP并没有做到这一点……谢谢你的回答,但它只有在memcpy的第一个参数是char时才起作用。在我的例子中,变量a是一个结构,里面有一个字符名[16]。当我调试通过memcpy(&a[I].name,name,strlen(name)+1)时,编译器会给我一个超出范围的地址。谢谢@cnicutar,你从一开始就是对的!我像你说的那样更改了所有内容,但忘了更改struct声明。现在它工作了!谢谢!:)谢谢您的回答,但只有当memcpy的第一个参数是char时,它才起作用。在我的例子中,变量a是一个结构,里面有一个字符名[16]。当我调试通过memcpy(&a[I].name,name,strlen(name)+1)时,编译器会给我一个超出范围的地址。谢谢@cnicutar,你从一开始就是对的!我像你说的那样更改了所有内容,但忘了更改struct声明。现在它工作了!谢谢!:)