gpt4 book ai didi

将#defined 字符串复制到结构数组中

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:57 27 4
gpt4 key购买 nike

我的结构如下:

//GUID structure
typedef struct {
var8 octet[16];
} GPTGUID_t;

还有一个很长的#define as:

#define PTYPE_MRP_UPPER     0x4db80b5ce3c9e316ULL
#define PTYPE_MRP_LOWER 0xae1502f02df97d81ULL

我希望在八位字节 0 到 7 中复制 UPPER 部分,在 8 到 15 中复制 LOWER。不幸的是,包括 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))

最佳答案

0x4db80b5ce3c9e316ULL 不是字符串,因此 strcpy 将 is 视为一个指针,并且具有这样的值,它指向错误的方式

您也不能使用 strcpy,因为它会复制直到找到零字节(字符 '\0')。请改用 memcpy

您也不会将指针 传递给memcpy 函数,而是传递值。您应该打开更多警告,因为编译器会喜欢它,但不足以使其成为明显的错误。

尝试像这样调用memcpy:

unsigned long long val;

val = PTYPE_MRP_UPPER;
memcpy(&guid.octet[0], &val, sizeof(val));
val = PTYPE_MRP_LOWER;
memcpy(&guid.octet[8], &val, sizeof(val));

关于将#defined 字符串复制到结构数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12802568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com