我有一个链接列表,我正在尝试为其添加值。但我必须错误地设置我的指针,或者内存分配会发生一些事情。
我想在列表中添加令牌,但每次有新的循环时数据都会重叠。例如:
第一次:
REPL>一个 一个
第二次:
REPL> b B'/ P>
B'/ P>
注意a刚刚消失,我想在添加新值时保留以前的值。
到目前为止,这是我的代码:
struct node {
int val;
struct node *next;
};
struct node *head = NULL;
struct node *cur = NULL;
struct node* create_list (int value)
{
struct node *ptr = (struct node*) malloc(sizeof (struct node));
if (NULL == ptr) return NULL;
ptr->val = value;
ptr->next = NULL;
ptr->next = head;
head = ptr;
return ptr;
};
struct node* insertion (int value)
{
if (NULL == head)
return (create_list(value));
struct node *ptr = (struct node*)malloc(sizeof(struct node));
ptr->val = value;
ptr->next = NULL;
ptr->next = head;
head = ptr;
return ptr;
};
void print_list(void)
{
struct node *ptr = head;
while(ptr != NULL) {
printf(" %s\n",ptr->val);
ptr = ptr->next;
}
return;
}
struct exp {
int type;
union {
int num;
char name;
double decimal;
char strq;
} value;
};
int main(int argc, char *argv[])
{
while(1) {
printf("repl>");
char *storage [30];
char* tok;
char g;
char buffer[20];
int pos = 0, i;
fgets(buffer,sizeof(buffer),stdin);
tok = strtok(buffer," ");
while(tok) {
pos++;
storage[pos] = tok;
create_list(storage[pos]);
tok = strtok(NULL," ");
}
print_list();
}
}
答案 0 :(得分:0)
我在您的代码中看到以下问题:
print_list
中,如果您想将节点上的值打印为字符,则可能需要将printf(" %s\n",ptr->val);
更改为printf(" %c\n",ptr->val);
。pos
。你可能想在行create_list(storage[pos]);
之后增加它。create_list
的参数类型为int
。您正在向其传递char *
。也许你打算通过storage[pos][0]
。tok = strtok(tok, " ");
。否则,while
循环对你没有任何帮助。在我的计算机中对代码进行了这些更改之后,程序的行为就像您预期的那样o。