Array copying problem

arun10427's Avatar, Join Date: Mar 2010
Light Poster
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);
}
abubacker1 like this
ungalnanban's Avatar, Join Date: Feb 2010
Go4Expert Member
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-pro...n-problem.html

Last edited by ungalnanban; 4Mar2010 at 12:23.. Reason: adding link
karthigayan's Avatar, Join Date: Feb 2010
Go4Expert Member
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.
arun10427's Avatar, Join Date: Mar 2010
Light Poster
@ungalnanban

Thanks for ur reply..
But when i call the function in main, I get this error.
ungalnanban like this
arun10427's Avatar, Join Date: Mar 2010
Light Poster
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?
abubacker1, ungalnanban likes this
abubacker1's Avatar, Join Date: Feb 2010
Light Poster
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);
}
abubacker1's Avatar, Join Date: Feb 2010
Light Poster
The above code is similar to arun10427 code , but I changed the function call as a
call by reference.
abubacker1's Avatar, Join Date: Feb 2010
Light Poster
want to copy the whole struct
try this
*dest =*src ;
ungalnanban's Avatar, Join Date: Feb 2010
Go4Expert Member
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