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声明。现在它工作了!谢谢!:)