【发布时间】: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