Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将命令行参数组合到链接列表中。然后它被打印出来,然后释放_C_Linked List - Fatal编程技术网

C 将命令行参数组合到链接列表中。然后它被打印出来,然后释放

C 将命令行参数组合到链接列表中。然后它被打印出来,然后释放,c,linked-list,C,Linked List,在字符串的链接列表中保留节点 struct Node { char* namePtr_; struct Node* nextPtr_; }; 要创建并返回从“argv[1]”到“argv[argc-1]”的字符串链接列表,或者如果“argc”正在为列表分配新的ptrNode而不是追加,则返回“NULL” 每次为列表分配新的ptrNode时,上一个ptrNode都会被擦除。您需要将新的ptrNode追加到列表的末尾,并将end更新到当前ptrNode for (i = 1;

在字符串的链接列表中保留节点

struct  Node
{
   char*  namePtr_;
   struct Node* nextPtr_;
};



要创建并返回从“argv[1]”到“argv[argc-1]”的字符串链接列表,或者如果“argc”正在为列表分配新的ptrNode而不是追加,则返回“NULL”

每次为列表分配新的ptrNode时,上一个ptrNode都会被擦除。您需要将新的ptrNode追加到列表的末尾,并将end更新到当前ptrNode

for (i = 1; i < argc; i++) { 
  struct Node * ptrNode;

  ptrNode = (struct Node*)malloc(sizeof(*list));

  ptrNode -> namePtr_ = (char *) malloc(strlen(argv[i])+1);

  strcpy(ptrNode -> namePtr_, argv[i]);

  ptrNode -> nextPtr_ = NULL;

  if(list==NULL){
    list = ptrNode; 
    end = ptrNode;
  }
  else {
   end->nextPtr_= ptrNode;
   end = ptrNode;
  }    
}

你好,谢谢你的回答。我确实用你告诉我的方法纠正了我的错误,但是它仍然像以前一样。我已经尝试过这个代码。它起作用了。您正在返回“列表”,对吗?是的,我正在返回列表。您的代码在发布方法中也有问题。您只释放列表中的第一个节点。您需要遍历整个列表并释放每个节点。检查已编辑的post@R.. 如果回答了您的问题,请单击“接受”按钮
   for  (i = 1;  i < argc;  i++)
   {
     struct Node * ptrNode;
     ptrNode = (struct Node*)malloc(sizeof(*list));
     ptrNode -> namePtr_ = (char *) malloc(strlen(argv[i])+1);
     strcpy(ptrNode -> namePtr_, argv[i]);
     ptrNode -> nextPtr_ = NULL;

     list = ptrNode;  //I think my problem is here
   }  
   }
  return(list);
    void print (const struct Node* list)
    {
      const struct Node* run;
      run = list;
      while(run != NULL){
          printf("%s\n", run->namePtr_);
          run = run -> nextPtr_;  
     }
     }
  void release (struct Node*    list)
  {
     struct Node* ans = list;
     free(ans);  
  }
        int main(int argc, char*  argv[])
       {     
         struct Node*   list;
         list   = makeList(argc,argv);
         print(list);
         release(list);  
         return(EXIT_SUCCESS);
   ./argList hello there
   hello
   there

   ./argList  hello there everyone 
   hello
   there 
   everyone
    ./argList hello there 
     there

    ./argList hello there everyone
     everyone
    list = ptrNode;
for (i = 1; i < argc; i++) { 
  struct Node * ptrNode;

  ptrNode = (struct Node*)malloc(sizeof(*list));

  ptrNode -> namePtr_ = (char *) malloc(strlen(argv[i])+1);

  strcpy(ptrNode -> namePtr_, argv[i]);

  ptrNode -> nextPtr_ = NULL;

  if(list==NULL){
    list = ptrNode; 
    end = ptrNode;
  }
  else {
   end->nextPtr_= ptrNode;
   end = ptrNode;
  }    
}
void release (struct Node*    list)
  {
     struct Node* run;
      run = list;
      while(run != NULL){
          printf("%s\n", run->namePtr_);
          struct Node* temp = run;
          run = run -> nextPtr_;  
          free(temp);
     }
}