2013-07-20 2 views
-4

Предположим, что у меня есть две переменные следующим образом:typecasting vs memcpy(): какой из них лучше?

typedef struct{ 
    int proc; 
    int id; 
    int value; 
    int last; 
} my_struct; 

struct my_struct dummy; 
int len = 3*sizeof(int); 
char my_msg[len]; 

//Some assignments are done here on those variables 

Теперь я хочу, чтобы стереть содержимое dummy, написав содержимое my_msg на нем. Тогда какой из следующих способов лучше подходит?

memcpy(&dummy, my_msg, size); 

или

&dummy = (my_struct *) my_msg; 
+0

В определении вашего типа нет 'struct my_struct', поэтому ваш пример не будет работать. –

+3

Что бы вы ожидали от последнего, если он действительно скомпилирован? –

+0

'dummy' должен быть объявлен как союз. –

ответ

6

Ваши типажи, кроме того, что вы получили синтаксис немного неправильно, имеют неопределенное поведение, потому что ваша структура может разного размера, из-за прокладки и имеют специфические свойства alignement. Не делай этого так.

1

Ни, вы можете использовать XDR для сериализации & десериализируются или что-то подобное

возможно библиотека XDR http://xstream.sourceforge.net/

еще одно просвещать себя с этим тоже Find holes in C structs due to alignment

+0

@KillianDS вы заметили эту строку "или что-то подобное" ????????? –

0
typedef struct{ 
    int proc; 
    int id; 
    int value; 
    int last; 
} my_struct; 

my_struct dummy; 

void main(){ 

    char my_msg[ sizeof(my_struct) ]; 
    memcpy(&dummy, &my_msg, sizeof(my_struct)); 
} 

Когда я разработать сетевую программу, я передаю информацию по структуре С. Я могу восстановить информацию таким образом

Смежные вопросы