【发布时间】:2022-01-06 19:53:59
【问题描述】:
对于这个任务,我应该从命令行参数中获取多个名称,这些名称以'+'(将名称插入我的链接列表)或'-'(从列表中删除名称)开头,所以如果我输入“+bill +jim +ted -bill”,我将添加这三个不带“+”的名称并删除账单。我尝试使用malloc 动态分配一个字符串,这样我就可以修改name 字符串,但是我的代码没有将字符串数据插入到我的链表中,当我通过一些时我得到一个 free(): invalid pointer 错误测试字符串。如果我将 free(name) 语句移动到 if/else if 语句中,我会遇到分段错误。我将如何从命令行正确地动态分配这些字符串以便可以修改它们?
int main(int argc, char *argv[]){
struct node* head;
for(int x = 0; x < argc; x++){
char * name = malloc((strlen(argv[x])+1));
name = argv[x];
if(name[0] == '+'){
printf("adding %s \n", name++);
insert(&head, name++);
printf("List: ");
printList(&head);
}
else if(name[0] == '-'){
printf("removing %s \n", name++);
removeNode(&head, name++);
}
free(name);
}
}
char * removeNode(struct node** head, char* name){
struct node *current = *head;
struct node *previous;
if(current == NULL){
return "error0";
}
if(current->data == name){
struct node * node2delete= *head;
*head = node2delete->next;
char * name2 = malloc(strlen(name)+1);
strcpy(name2, name);
free(node2delete);
printf("Removed %s \n", name);
return name2;
}
while(current != NULL){
previous = current;
current = current->next;
if(current->data == name){
previous->next = current->next;
char * name2 = malloc(strlen(name)+1);
strcpy(name2, name);
free(current);
printf("Removed %s \n", name);
return name2;
}
}
return "error0";
}
【问题讨论】: