【问题标题】:Q: Compiler Error of linked list, but still runs问:链表编译错误,但仍然运行
【发布时间】:2015-12-11 02:12:05
【问题描述】:

我不确定为什么会出现这些错误,但最奇怪的是,我仍然能够运行程序并产生我想要的结果。

我得到的编译器错误是

IntelliSense:“MyStruct *”类型的值不能分配给“Mystuct_struct *”类型的实体

这有 4 个实例,但正如我在标题中所述,该程序似乎仍然运行良好,并按我想要的方式显示 bin 文件。是的,我知道我的结构名称不好。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>


typedef struct MyStruct_struct

{
  char FlightNum[7];
  char OriginAirportCode[5];
  char DestAirportCode[5];
  int timeStamp;
  struct Mystruct_struct* next;
} MyStruct;

int main()
{
  time_t time;
  MyStruct * ptr;
  MyStruct *  head; 
  MyStruct * tail;
  MyStruct * temp;
  FILE * bin;
  MyStruct myStruct;

  bin = fopen("acars.bin", "rb");
  ptr= (struct MyStruct_struct *) malloc (sizeof(MyStruct) );    
  fread(ptr,sizeof(MyStruct)-sizeof(MyStruct*),1,bin); 

  head = ptr; // make head point to that struct
  tail = ptr; // make tail point to that struct

  while (1) 
    {
      ptr = (struct MyStruct_struct *) malloc(sizeof(MyStruct)); 
      fread(ptr, sizeof(MyStruct) - sizeof(MyStruct*), 1, bin); 
      tail->next = ptr; // error here
      tail = tail->next; //error here

      if (feof(bin) != 0)
        break;




    }
  tail->next = NULL;

  ptr = head;
  while (ptr->next != NULL) 
    {

      printf("%s ", ptr->FlightNum);
      printf("%s ", ptr->OriginAirportCode);
      printf("%s ", ptr->DestAirportCode);
      time = ptr->timeStamp;
      printf("%s",ctime( &time));
      ptr = ptr->next; // here
    }

  ptr = head;
  while (ptr->next != NULL) 
    {

      temp = ptr;

      ptr = ptr->next; //error here
      free(temp);
    }


  fclose(bin);
  system("pause");
  return 0;
}

【问题讨论】:

  • 1) 警告或错误? 2)你确定它运行的是你的最新版本还是最后一次成功的编译? 3) 请修正格式,以便您的代码可读。
  • 您问题中的错字是真正的错字还是问题?在您的问题中,错误消息显示“Mystuct_struct”(缺少第一个“r”)。此外,保存那些可能必须维护您的代码并且没有变量标签与变量类型匹配并且仅因大小写而异的人。这只是卑鄙的。
  • 错误,而不是警告。是的,它正在运行最新版本。见:imgur.com/1Ga1I8T

标签: c pointers struct malloc


【解决方案1】:

您的结构定义中有错字。下一个变量的类型是 MyStuct_Struct。在 MyStuct_Struct 上检查您的拼写。它仍然有效,因为 C 很高兴不是类型安全的。指针就是指针,所以你不会出现内存错误。

【讨论】:

  • 谢谢!但它仍然会产生相同的错误:10 IntelliSense:“Mystruct_struct *”类型的值不能分配给“MyStruct *”类型的实体
  • 好吧,所以我的C技能有点生疏了,但是看了警告的截图后,我想我明白了。在结构定义中,next 是 MyStruct_Struct* 类型。 ptr 的类型是 MyStruct*。在第 38 行,tail->next 得到 prt(您将 MyStruct* 分配给 MyStruct_Strict*)。然后其他三个错误是相反的,您将 tail->next 分配给 tail(也是 MyStruct* 类型)。将所有内容(初始变量定义)更改为 MyStruct_Struct,它应该可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多