我有一个结构为:C:复制#define的字符串转换成一个结构阵列
//GUID structure
typedef struct {
var8 octet[16];
} GPTGUID_t;
及长的#define为:
#define PTYPE_MRP_UPPER 0x4db80b5ce3c9e316ULL
#define PTYPE_MRP_LOWER 0xae1502f02df97d81ULL
我想UPPER部分在八位位组0复制到7和LOWER在8到15. 不幸的是,包括memcpy在内的所有尝试都失败了,并给出段错误。
我试过的东西如:
strcpy(guid.octet[0], PTYPE_MRP_UPPER);
strcpy(guid.octet[8], PTYPE_MRP_LOWER);
而且也
memcpy(guid.octet[0], PTYPE_MRP_UPPER, sizeof(PTYPE_MRP_UPPER));
memcpy(guid.octet[8], PTYPE_MRP_LOWER, sizeof(PTYPE_MRP_LOWER));
两个都失败了。请帮帮我。
正如一个侧面说明:
typedef unsigned char var8;
typedef unsigned short var16;
typedef unsigned int var32;
但是,我能提取单个八位字节:
memcpy(guid.octet, pHdr->partTypeGUID, sizeof(GPTGUID_t));//copy the partitionTypeGUID
p1 = getvar64(guid.octet[0]);
p2 = getvar64(guid.octet[8]);
其中,#define getvar64(x) (*(var64*)(&x))
阅读strcpy的功能。阅读memcpy的功能。特别注意签名中的类型。你的两个#defined符号是无符号长整型,而不是字符串或指针。你在做什么是无稽之谈。 –
@SanJacinto:我知道那个......大声笑。我刚刚尝试了其他一切,因为memcpy在第一个实例中失败。 – kingsmasher1