相关疑难解决方法(0)

解除引用类型惩罚指针将破坏严格别名规则

我有一个unsigned char指针,其中包含一个结构.现在我想要执行以下操作

unsigned char buffer[24];

//code to fill the buffer with the relevant information.

int len = ntohs((record_t*)buffer->len);
Run Code Online (Sandbox Code Playgroud)

其中record_t结构包含一个名为len的字段.我无法这样做并且收到错误.

error: request for member ‘len’ in something not a structure or union.
Run Code Online (Sandbox Code Playgroud)

然后我尝试了:

int len = ntohs(((record_t*)buffer)->len);
Run Code Online (Sandbox Code Playgroud)

这样才能使操作员优先.那给了我warning: dereferencing type-punned pointer will break strict-aliasing rules.

然后我宣布

record_t *rec = null;

rec = (record_t*)
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

c gcc pointers

13
推荐指数
2
解决办法
1万
查看次数

编译错误:请求成员不是结构或联合

编辑: 以下代码已被修改为工作,因为问题已解决.

具体来说,(*hardwareList.next_item)->next最初是在没有括号的情况下编写的(例如as *hardwareList.next_item->next),编译器也不理解它.

我正在努力解决为什么编译器与我的C代码混淆.我正在尝试创建一个存储所有项目的链接列表,以及指向最后一个"下一个"变量的地址的指针,以便于追加.

typedef struct {
  int recordNum;
  char toolName[25];
  int quantity;
  float cost;
} HardwareData;

typedef struct _HardwareListItem{
  HardwareData data;
  struct _HardwareListItem* next;
} HardwareListItem;

typedef struct _HardwareList {
  HardwareListItem* items;
  HardwareListItem** next_item;
} HardwareList;

HardwareList readFromFile(FILE* fp)
{
  char stopReading = 0;
  HardwareList hardwareList = {0};
  hardwareList.next_item = &hardwareList.items;
  do {
    *hardwareList.next_item = (HardwareListItem*)calloc(1, sizeof(HardwareData));
    if (*hardwareList.next_item == NULL)
    {
      fprintf(stderr, "OOM Reading File\n");
      fflush(stderr);
      exit(EXIT_FAILURE);
    }
    if (fread(&((*hardwareList.next_item)->data), sizeof(HardwareData), 1, fp) != …
Run Code Online (Sandbox Code Playgroud)

c linked-list random-access

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×2

gcc ×1

linked-list ×1

pointers ×1

random-access ×1