0

OFFSETOF マクロを使用して構造体のフィールドを更新するコード

#include <stdio.h>   
#define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT))   

typedef struct PodTag {    
int     i;    
double  d;    
char    c; 
}PodType;   

#pragma pack(1)
int main() 
{    
     char arr[20] = {'\0'};
     arr[0] = 0x1;
     PodType instance;
     printf("%d\n", OFFSETOF(PodType, c));   
     memset(&instance,0,sizeof(PodType)); 
     memcpy(&instance+OFFSETOF(PodType, c),&arr[0],sizeof(char));
     printf("Val of C = %d\n",instance.c); // value is not reflected
     getchar();    
return 0; 
} 

ここで私は memcpy をやっています。値が反映されません。どうしたの

memcpy(&instance+OFFSETOF(PodType, c),&arr[0],sizeof(unsigned char));

構造体フィールドを更新するためにこのようなことを行うことはできますか

#define OFFSETOF_DATA(TYPE, ELEMENT,data) \
  (*((size_t)&(((TYPE *)0)->ELEMENT)) = (unsigned char)(data))  
4

2 に答える 2

0

(TYPE*)0<< は NULL ポインターになります。

于 2013-11-08T05:25:30.120 に答える