我正在尝试获取字符和每个字符的数量并将它们放入链表中。正如标题所述,我不断收到有关不兼容指针类型的警告以及有关取消引用不完整类型的错误。我想我说的最后一句是因为 start 为空,但我不明白为什么当我将其分配给临时时。 请帮忙。
/* Author: Miller Kahihu
Date: 2017-02-01
Program getChars.c
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct linkedList
{
struct Element* start;
int size;
} LinkedList;
typedef struct element
{
char key;
int value;
struct Element* next;
} Element;
int main(int argc, char** argv)
{
LinkedList* list = malloc(sizeof(LinkedList));
list->start = NULL;
list->size = 0;
char* fileName = NULL;
if(argc > 1)
{
fileName = argv[1];
}
else
{
exit(1);
}
FILE* fpIn = fopen(fileName, "r");
if(!fpIn)
{
fprintf(stderr, "file %s could not be openedn", fileName);
exit(1);
}
int c;
Element* temp = (Element*) malloc(sizeof(Element));
while((c=fgetc(fpIn)) !=EOF)
{
if(list->start == NULL)
{
temp->key = (char) c;
temp->value = 1;
temp->next = NULL;
list->start = temp;
printf("%c kappan", list->start->key);
}
else
{
printf("%cn", (char) c);
}
}
//free(temp);
return 0;
}
这是完整的错误消息
getChars.c: In function ‘main’:
getChars.c:51:25: warning: assignment from incompatible pointer type [enabled by default]
list->start = temp;
^
getChars.c:52:45: error: dereferencing pointer to incomplete type
printf("%c kappan", list->start->key);
^
> 问题不是struct Element
这样的东西。 clang
在其警告中提供了更多的线索。
test.c:52:25: warning: incompatible pointer types assigning to 'struct Element *' from 'Element *'
(aka 'struct element *') [-Wincompatible-pointer-types]
list->start = temp;
^ ~~~~
你有struct element
和Element
但没有struct Element
.
typedef struct element
{
char key;
int value;
struct Element* next;
} Element;
使用不同的案例是冒着这种愚蠢的风险。你最好这样:
typedef struct Element
{
char key;
int value;
struct Element* next;
} Element_t;
使用大写字母意味着您不会与内置字母冲突。 struct Element
不会与任何事情发生冲突。Element_t
很明显它是一种类型,不会与变量和函数名称冲突。