C ds#U列表可以';t处理3个以上的元素

C ds#U列表可以';t处理3个以上的元素,c,C,我不知道为什么我不能添加第四个元素 (我正在使用mingw操作windows) 这是我的代码: #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_

我不知道为什么我不能添加第四个元素

(我正在使用mingw操作windows)

这是我的代码:

#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;
}
我不知道为什么会这样。一切都会好起来的。 我的朋友告诉我它正在ubuntu上工作

temp = (ds_list)(malloc(sizeof(ds_list)));
将是

temp = malloc(sizeof(*temp)));
您想为
struct-ds\u-list\u元素
分配内存,而不是
struct-ds\u-list\u元素*
。不要在typedef名称后面隐藏指针。它很少有帮助


您还应该检查
malloc
的返回值,并且不需要强制转换。

使用
ds\u 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;
}

这就是为什么从不键入指针。
#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