This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Issues with memcpy


Could be my imagination, but are you assuming the size of your struct
is 9 bytes?  This is most likely a false assumption.  Try using
sizeof(t_st) instead.  Likely it's 12 bytes.

  Brian

On 4/27/05, Javier Valencia <jvalencia@log01.org> wrote:
> I'm having some issues with memcpy, i've attached two example files,
> just copying a structure in a char array. The result is different in
> both files, but they do the same.
> 
> The output is this:
> 
> tigre@enigma collector $ gcc pro.c
> tigre@enigma collector $ ./a.out
> 5 0 0 0 5 0 0 0 5
> 
> tigre@enigma collector $ gcc pro2.c
> tigre@enigma collector $ ./a.out
> 5 fffffffa ffffffff ffffffbf 5 0 0 0 5
> 5 fffffffa ffffffff ffffffbf 5 0 0 0 5
> 
> Can someone explain it to me?
> 
> Thanks
> 
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> 
> typedef struct
> {
>         char ctype;
>         int itype;
>         int itype2;
> } t_st;
> 
> int main()
> {
>         int a;
>         char buffer[9];
>         t_st mystruct;
> 
>         mystruct.ctype = 5;
>         mystruct.itype = 5;
>         mystruct.itype2 = 5;
> 
>         bzero(buffer, 9);
> 
>         memcpy(buffer, (char*)&mystruct, 9);
> 
>         for(a=0; a<9; a++)
>                 printf("%x ", buffer[a]);
>         printf("\n");
> 
>         return 0;
> }
> 
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> 
> typedef struct
> {
>         char ctype;
>         int itype;
>         int itype2;
> } t_st;
> 
> int main()
> {
>         int a;
>         char buffer[9];
>         char *buffer2;
>         t_st mystruct;
> 
>         mystruct.ctype = 5;
>         mystruct.itype = 5;
>         mystruct.itype2 = 5;
> 
>         bzero(buffer, 9);
> 
>         memcpy(buffer, (char*)&mystruct, 9);
> 
>         for(a=0; a<9; a++)
>                 printf("%x ", buffer[a]);
>         printf("\n");
> 
>         buffer2 = (char*)malloc(sizeof(char)*9);
>         bzero(buffer2, 9);
> 
>         memcpy(buffer2, (char*)&mystruct, 9);
> 
>         for(a=0; a<9; a++)
>                 printf("%x ", buffer2[a]);
>         printf("\n");
> 
>         return 0;
> }
> 
> 
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]