这个简单的程序创建了一个包含首字母缩写词及其完整短语的链表。有两个功能:
第一个创建一个节点,如果列表为空,则将节点放在第一位,否则将其放在列表末尾
void createNode(struct node **list, char *siglaElem, char *parolaElem) {
struct node *new_node;
new_node = malloc(sizeof(struct node));
strcpy(new_node->sigla,siglaElem);
strcpy(new_node->parola,parolaElem);
new_node->next = NULL;
if (*list == NULL) {
*list = new_node;
} else {
while ((*list) != NULL) {
(*list) = (*list)->next;
}
(*list)->next = new_node;
}
}
第二个函数扫描整个列表。
int scanList(struct node **list, char *siglaElem, char *parolaElem) {
struct node *scroll = *list;
for (; scroll != NULL; scroll = scroll->next) {
if (strcmp(scroll->sigla, siglaElem) == 0) {
if (strcmp(scroll->parola, parolaElem) == 0)
return 1;
else
return 2;
}
}
createNode(list, siglaElem, parolaElem);
return 0;
}
- 如果在列表中找到相同的首字母缩写词和短语,则返回 1
- 如果找到具有相同首字母缩写词但不同短语的节点,则返回 2
- 最后,如果列表中没有具有相同首字母缩写词的节点,则返回 0,它调用第一个函数并创建一个。
main() 函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
char *sigla;
char *parola;
struct node *next;
};
int scanList(struct node **list, char *sigla, char *parola);
void createNode(struct node **list, char *siglaElem, char *parolaElem);
int main() {
struct node *first = NULL;
createNode(&first, "SI", "Sistema Informatico");
createNode(&first, "OS", "Operating System");
printf("%d %d\n", scanList(&first, "SI", "Sistema Informatico"), scanList(&first, "OS", "Operating System"));
return 0;
}
我不明白为什么会出现分段错误:11
我认为我在循环中做错了什么。有什么解决办法吗?