searchn()
リンクされたリストlist
と文字列を受け取る関数に取り組んでいますlname
。
これは完全に問題なくコンパイルされますが、関数を実行しようとするとセグメンテーション エラー (コア ダンプ) が発生します。Valgrind で実行したところ、使用方法strcpy
がstrcmp
間違っていることがわかりました。私の構造体player
も参照用に含まれています。誰かが私が間違っていることを見ることができますか? 申し訳ありませんが、私はコーディングが得意ではありません。
どんな助けでも素晴らしいでしょう。ありがとう。
struct player {
char* fname;
char* lname;
char pos;
int val;
int rank;
struct player* next;
};
void searchn(struct player* list, char* lname){
while (list!=NULL && strcmp(list->lname, lname) != 0){
list = list->next;
}
if (list != NULL && strcmp(list->lname, lname)==0) {
printf("%s found! \n", lname);
printf("%s \n", list->lname);
printf("%s \n", list->fname);
printf("%c \n", list->pos);
printf("%d \n", list->val);
printf("\n");
}
}
以下は、リンクされたリストを設定する方法です。
void addp (struct player* newnode, struct player* list){
struct player* templist1;
// if the list is non empty.
if (list !=NULL){
if(newnode->pos == GOALKEEPER){ //insert if G.
while (list->next != NULL && (list->next)->rank < 1){
list = list->next;
}
templist1 = list->next;
list->next = newnode;
newnode->next = templist1;
}
if(newnode->pos == DEFENDER){// after G bef M.
// iterate through templist.
while (list->next != NULL && (list->next)->rank < 2) { // go to end of G.
// when the list isn't empty next node rank is less than one, keep going
list = list -> next;
}
// when finally rank == or > 1, then add newnode.
templist1 = list->next;
list->next = newnode;
newnode->next = templist1;
}
if(newnode->pos == MIDFIELDER){ //after G and M but before S
while (list->next != NULL && (list->next)->rank < 3) {
list = list -> next;
}
// when stopped, then add newnode.
templist1 = list->next;
list->next = newnode;
newnode->next = templist1;
}
if(newnode->pos == STRIKER){ // at the end.
while (list->next != NULL && (list->next)->rank < 4){
list = list -> next;
}
templist1 = list->next;
list->next = newnode;
newnode->next = templist1;
}
printf("player added");
}
}