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