gpt4 book ai didi

c - 将命令行参数组装成链接列表。然后打印出来,free()d

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:36 25 4
gpt4 key购买 nike

在字符串链表中保存一个节点。

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

struct Node*  makeList(int  argc,
char* argv[])
{
struct Node* list = NULL;
struct Node* end = NULL;
int i;

创建并返回从 'argv[1]' 到 'argv[argc-1]' 的字符串链表,或者如果 'argc' <= 1 则返回 'NULL'。

   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);

打印“list”中的“namePtr_”值。

    void print (const struct Node* list)
{
const struct Node* run;
run = list;
while(run != NULL){
printf("%s\n", run->namePtr_);
run = run -> nextPtr_;
}
}

释放列表的 nextPtr 和 namePtr,以及所有 nextPtr_ 后继者。

  void release (struct Node*    list)
{
struct Node* ans = list;
free(ans);
}

创建、打印和 free() 链表。

        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

最佳答案

您正在将新的 ptrNode 分配给列表而不是追加

    list = ptrNode;

每次您将新的 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;
}
}

对于释放列表,你的代码只释放列表中的第一个节点,你需要遍历整个列表并释放每个节点

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);
}
}

关于c - 将命令行参数组装成链接列表。然后打印出来,free()d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53165323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com