2014-11-25 2 views
1

Итак, у меня есть стек char *. По сути, я хочу выскочить из этого стека и объединить его в одну длинную строку, разделенную «/» и вернуть ее. Однако я не знаю, как это сделать должным образом.Выпадающий стек char *, чтобы создать новую строку и вернуть ее

Я пытаюсь сделать это в 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; 

Любая помощь очень ценится. Thanks

+0

SizeOf (Char) определяется как 1, так что вы можете упасть, что часть. –

+0

Пожалуйста, [не набрасывайте] (http://stackoverflow.com/q/605845/2173917) возвращаемое значение 'malloc()'. –

+0

'output' неинициализирован после того, как вы malloc его. Вы должны, по крайней мере, установить 'output [0] = '\ 0''. Также неясно, возвращает ли 'stacksize()' требуемый размер, так как вы не дали нам код для него. – JS1

ответ

1

Включает ли функция stacksize общую длину конкатенированной строки или количество элементов в стеке?

В случае возвращает количество полукокса * указатели в стеке вам нужно предварительно выделить общий размер сцепленной строки:

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; 
} 
+1

Ты потрясающий! Прекрасно работает – jjamzn

+1

@jjamzn, пожалуйста. Если вам не нужна дополнительная помощь, отметьте вопрос как ответ. – ezorita

Смежные вопросы