【发布时间】:2015-04-17 06:28:34
【问题描述】:
我创建了一个链表程序,它与 c 中的整数完美配合。 但如果将参数更改为 char 数组,并尝试执行 strcpy,则会导致核心转储。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
char mac[25];
struct node * next;
};
typedef struct node *list;
int main(void) {
lista c;
c = creoLista();
c = insert_start(c, "aa:bb:cc:dd:e1");
c = insert_start(c, "aa:bb:cc:dd:e2");
c = insert_start(c, "aa:bb:cc:dd:e3");
showList(c);
return 0;
}
list createList() {
return NULL;
}
list insert_start(list l1, char val[]) {
list n;
n =(list )malloc(sizeof(list));
strcpy(n->mac,val);
printf("ADDED: %s en ADDRESS:%p NEXT ADDRESS: %p\n", n->mac,(void *)(&n), (void *) (&n->next));
n -> next = l1;
return n;
}
void showList(list l1) {
while (l1 != NULL){
printf("Value: %s Address: %p\n",l1 -> mac,(void *) (&l1 -> next) );
l1 = l1 -> next;
}
}
关于我做错了什么以及为什么它适用于 int 而不是 char 数组的任何提示
谢谢
【问题讨论】:
-
您没有检查代码中任何地方可能存在的空指针。
-
这个
malloc(sizeof(list))分配空间来保存一个指针。可能你需要这个malloc(sizeof(struct node))来分配空间来保存节点而不是指向节点的指针? -
creoLista()定义在哪里?此外,您也不需要强制转换 printf
标签: c arrays linked-list strcpy