gpt4 book ai didi

c - 将值从简单表复制到 C 代码中指定地址的结构中的表时出现问题

转载 作者:行者123 更新时间:2023-11-30 16:08:19 26 4
gpt4 key购买 nike

当我想将值从一个表复制到结构中的另一个表(并且具有结构中表的指定地址)时,我遇到了此代码的问题。

我把代码示例放在下面。如果我使用 PtrTableStruct,则不起作用。如果我使用 PtrTableStruc2,它可以工作,但没有指定地址。有人可以帮助我吗:)

typedef struct
{
unsigned short Table_Truc[256];
unsigned short Table_Essai[256];
} ESSAI_STRUC_TABLE;

int main(int argc, char *argv[]) {
unsigned char TheTable[2];

ESSAI_STRUC_TABLE *PtrStruct = (ESSAI_STRUC_TABLE*) 0x1000000;
unsigned char* PtrTableStruct = (unsigned char*) &PtrStruct->Table_Essai[0];

unsigned char* PtrTableStruct2 = (unsigned char*) malloc(256 * sizeof(unsigned short));

printf("address TheTable 0x%x\n",TheTable);
printf("address PtrStruct 0x%x\n", PtrStruct);
printf("address PtrTableStruct 0x%x\n", PtrTableStruct);
printf("address PtrTableStruct2 0x%x\n", PtrTableStruct2);

TheTable[0] = 100;
TheTable[1] = 101;

unsigned char * NewTable = TheTable;

int iter;

for(iter=0;iter<2;iter++){
*PtrTableStruct++ = *NewTable++; // that does not work
// *PtrTableStruct2++ = *NewTable++; // that works
}

return 0;
}

最佳答案

此作业:

ESSAI_STRUC_TABLE *PtrStruct = (ESSAI_STRUC_TABLE*) 0x1000000;   

可能不会做你期望的事情。没有任何迹象表明在地址 0x1000000 处分配了足够的内存,或者该位置由您的进程拥有。

一般来说,因为你有:

typedef struct
{
unsigned short Table_Truc[256];
unsigned short Table_Essai[256];
} ESSAI_STRUC_TABLE;

...然后您可以通过创建一个实例和一个指针来获取指向该结构体实例的指针:

ESSAI_STRUC_TABLE instanceOfTable[2] = {0}, *ptrToInstanceOfTable = NULL;

...并将指针分配给实例的地址:

ptrToInstanceOfTable  = &instanceOfTable[0];//pointer is pointing 
//to legal memory owned by the process.

现在,ptrToInstanceOfTable 指向足以容纳 2 个 ESSAI_STRUC_TABLE 数组的内存区域。

基于同样的推理,这个陈述:

unsigned char * NewTable = TheTable;

可以写成:

unsigned char *NewTable = &TheTable[0];

关于c - 将值从简单表复制到 C 代码中指定地址的结构中的表时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377933/

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