У меня проблемы с созданием связанного списка, а также с некоторыми вспомогательными функциями, которые я пытаюсь создать. Мой код выглядит следующим образом:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "getNextWord.h"
#define MAX_WORD_SIZE 256
typedef struct{
int counter;
char* key;
struct node* next;
} node;
node* createNode(char* words){
node* head;
if(!(head=malloc(sizeof(node)))) return NULL;
head->key=words;
head->next=NULL;
return head;
}
node* addToList(node* head, char* words){
node* newNode;
newNode=createNode(words);
newNode->next = head;
return newNode;
}
int find(node* head){
if (head->next != NULL){
node* next = head->next;
while(head != NULL){
if (strcmp(head->key,next->key)==0){
head->counter++;
head=head->next;
return 1;
}
else{
head=head->next;
}
}
}
return 0;
}
void printList(node* head){
node* pointer = head;
while (pointer != NULL){
printf("%s",pointer->key);
pointer=pointer->next;
}
printf("\n");
}
int main(int argc, char* argv[]){
if(argc<2){
fprintf(stderr, "Not enough arguments given\n");
}
for(int i=1; i< argc; i++){
FILE* fd=fopen(argv[i], "r");
if(fd != NULL){
char* words;
node* head = NULL;
while((words=getNextWord(fd)) != NULL){
find(head);
if (find(head) == 0){
createNode(words);
}
printList(head);
fprintf(stdout,"%s\n",words);
}
}
else(printf("No such file exists"));
fclose(fd);
}
return 0;
}
Я посмотрел в Интернете, и, похоже, я слежу за тем, что делает большинство людей в отношении связанного списка. Я не получал никаких ошибок раньше, только куча «предупреждение: назначение из несовместимого типа указателя» в следующих функциях:
addtolist (the line before the return)
find (before return one and the else line)
printlist (the last line in the while loop)
Я знаю, что код не так хорош, я не лучший программист, но просто пытаюсь учиться. Кроме того, мое getnextword работает, но если это нужно для чего-то, я тоже могу опубликовать это.