Hi I am trying to copy one struct to another, but I am making some minor mistake that it is not getting copied. Can someone help me fix it? Code: #include<stdio.h> #include<stdlib.h> typedef struct { int inst_addr; }instruction; void copy_struct(instruction src,instruction dest) { dest.inst_addr = src.inst_addr; } int main() { int addr = 1000; instruction check1; instruction check2; check1.inst_addr = 10; check2.inst_addr = 50; copy_struct(check1,check2); printf("%d",check2.inst_addr); }
You need to send two pointers to the function that will copy the structure. Code: void copy_struct(instruction *src, instruction *dest) { *dest=*src; } see the Link http://cboard.cprogramming.com/c-programming/124395-copying-function-problem.html
You can not straight away copy the structure ,you need to pass the address of the structure to the function then using that address you can copy the contents.
This is the error message: error: incompatible type for argument 1 of ‘copy_struct’ note: expected ‘struct instruction *’ but argument is of type ‘instruction’ error: incompatible type for argument 2 of ‘copy_struct’ note: expected ‘struct instruction *’ but argument is of type ‘instruction’ Am I making some mistake in calling the fuction?
Code: typedef struct { int inst_addr; }instruction; void copy_struct(instruction *src,instruction *dest) { dest->inst_addr = src->inst_addr; } int main() { int addr = 1000; instruction check1; instruction check2; check1.inst_addr = 10; check2.inst_addr = 50; copy_struct(&check1,&check2); printf("%d",check2.inst_addr); }
The above code is similar to arun10427 code , but I changed the function call as a call by reference.
See the following Example: Code: #include<stdio.h> typedef struct { int inst_addr; }instruction; void copy_struct(instruction *src,instruction *dest) { *src=*dest; } int main() { int addr = 1000; instruction check1; instruction check2; check1.inst_addr = 10; check2.inst_addr = 50; printf("One: %d\n",check1.inst_addr); printf("Two: %d\n",check2.inst_addr); copy_struct(&check1,&check2); printf("One: %d\n",check1.inst_addr); printf("Two: %d\n",check2.inst_addr); } Output: One: 10 Two: 50 One: 50 Two: 50