弹出一堆char*以生成一个新字符串并返回它

弹出一堆char*以生成一个新字符串并返回它,c,string,stack,malloc,concatenation,C,String,Stack,Malloc,Concatenation,所以我有一堆字符*。本质上,我想弹出堆栈,将其连接成一个长字符串,用“/”分隔,然后返回它。然而,我不知道如何正确地做到这一点 我正试图用C语言来做这件事,所以我的代码是这样的。Stacksize返回堆栈的大小。道歉如果这不好,我真的不知道 struct stack* test = new_stack(); struct stacknode = test->head; char* output = (char*)malloc(sizeof(char) * stacksize(test));

所以我有一堆字符*。本质上,我想弹出堆栈,将其连接成一个长字符串,用“/”分隔,然后返回它。然而,我不知道如何正确地做到这一点

我正试图用C语言来做这件事,所以我的代码是这样的。Stacksize返回堆栈的大小。道歉如果这不好,我真的不知道

struct stack* test = new_stack();
struct stacknode = test->head;
char* output = (char*)malloc(sizeof(char) * stacksize(test));

while(stacknode != NULL){
   strcat(output, stacknode->name);
   stacknode = stacknode->nextNode;
}
  return output;

非常感谢您的帮助。谢谢

stacksize函数是否返回连接字符串的总长度或堆栈中的元素数

如果它返回堆栈中char*指针的数量,则需要预先分配连接字符串的总大小:

struct stack * test = new_stack();
struct stacknode = test->head;
unsigned int totalsize = 0;

while (stacknode != NULL) {
  totalsize += strlen(stacknode->name);
  stacknode = stacknode->nextnode;
}

char* output = malloc(totalsize + 1); // Allow 1 byte for the \0 character.
*output = 0; // strcat needs to know where output ends.
stacknode = test->head;

while(stacknode != NULL) {
  strcat(output, stacknode->name);
  stacknode = stacknode->nextNode;
}

sizeof(char)定义为1,因此您可以删除该部分。请在malloc后取消初始化
malloc()
output
的返回值。您至少应该设置
输出[0]='\0'
。另外,还不清楚
stacksize()
是否返回了所需的大小,因为您没有为它提供代码。您太棒了!作品perfectly@jjamzn不客气。如果不需要进一步帮助,请将问题标记为已回答。