我不知道为什么我甚至不能添加第4个元素......
(即时通讯与mingw合作)
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
typedef struct ds_list_element {
char value[MAX];
struct ds_list_element *next;
}* ds_list;
int ds_list_empty(ds_list id) { // id listy
if (id == NULL) return 1;
else return 0;
}
ds_list ds_list_add(ds_list id, char add[MAX]) {
ds_list temp;
temp = (ds_list)(malloc(sizeof(ds_list)));
strcpy(temp->value,add);
temp->next = id;
return temp;
}
void ds_list_print(ds_list id) {
if (ds_list_empty(id) == 0) {
printf("%s\n",id->value);
ds_list_print(id->next);
}
}
int main () {
ds_list my_list = NULL;
my_list = ds_list_add(my_list,"one");
my_list = ds_list_add(my_list,"two");
my_list = ds_list_add(my_list,"three");
my_list = ds_list_add(my_list,"four");
ds_list_print(my_list);
return 0;
}
结果是:
four
three
two
y
Press any key to continue . . .
我不知道为什么会这样。一切都应该工作正常。 我的朋友告诉我它正在开发ubuntu ......
答案 0 :(得分:2)
temp = (ds_list)(malloc(sizeof(ds_list)));
将是
temp = malloc(sizeof(*temp)));
您想为struct ds_list_element
而不是struct ds_list_element*
分配内存。不要隐藏typedef名称后面的指针。它很少有帮助。
此外,您应该检查malloc
的返回值,并且不需要进行投射。
答案 1 :(得分:0)
使用ds_list
作为结构而不是指针
typedef struct ds_list_element {
char value[MAX];
struct ds_list_element *next;
}ds_list;
并为结构分配内存而不是指针。
工作计划:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
typedef struct ds_list_element {
char value[MAX];
struct ds_list_element *next;
}ds_list;
int ds_list_empty(ds_list *id) { // id listy
if (id == NULL) return 1;
else return 0;
}
ds_list * ds_list_add(ds_list *id, char add[MAX]) {
ds_list *temp;
temp = (malloc(sizeof(ds_list)));
strcpy(temp->value,add);
temp->next = id;
return temp;
}
void ds_list_print(ds_list *id) {
if (ds_list_empty(id) == 0) {
printf("%s\n",id->value);
ds_list_print(id->next);
}
}
int main () {
ds_list *my_list = NULL;
my_list = ds_list_add(my_list,"one");
my_list = ds_list_add(my_list,"two");
my_list = ds_list_add(my_list,"three");
my_list = ds_list_add(my_list,"four");
ds_list_print(my_list);
return 0;
}
输出:
four
three
two
one