Я составил список для обработки данных, и у меня возникла проблема, из-за которой я не нашел причину, для меня мой код кажется правильным, но есть проблемы.
Что я пытаюсьсделать следующее: у меня есть список, который содержит х элементов.Я хочу добавить элемент p в список, затем взять каждый элемент x, добавить p в строку, которую они представляют, и добавить их в список.(сам по себе список работает отлично, именно эта операция вызывает проблемы).
Проблема в том, что когда я делаю это и пытаюсь отобразить список, первые элементы x + p отображаются хорошо, но послеЯ вижу некоторые странные символы, которые не имеют никакого отношения к входам.
Вот функции, которые я использую:
void addFirst(struct list *l, char *key)
{
struct node *x = createNode(key) ;
if (l->size == 0)
{
l->first = x;
}
else
{
x->next = l->first;
l->first = x;
}
l->size++;
return;
}
void showList(struct list* l)
{
struct node *p=l->first;
while (p!=NULL)
{
printf("%s \n",p->key);
p=p->next;
}
return;
}
void copyPlus(struct list* l,char *ch)
{
struct node *p=l->first;
addFirst(l,ch);
while (p!=NULL)
{
int len1=strlen(p->key);
char cat[len1+2];
strcpy(cat,p->key);
strcat(cat,ch);
cat[len1+1] = '\0';
printf("[%s] \n",cat);
addFirst(l,cat);
printf("{%s} \n",l->first->key);
p=p->next;
}
return;
}
int main()
{
struct list *A=createList();
addFirst(A,"1");
addFirst(A,"2");
addFirst(A,"4");
copyPlus(A,"3");
printf("=%s= \n",A->first->key); //this one works!
printf("=%s= \n",A->first->next->key);
printf("=%s= \n",A->first->next->next->key);
showList(A);
deleteList(A);
}
Я пропустил ненужные вещи, это классический список.
Узел определен таким образом:
struct node
{
struct node *next;
char *key;
};
После дальнейшего исследования выясняется, что процесс работает правильно (два // printf в copyPlus работают так, как они должны).И последний // printf ничего не отображает, даже если я сделаю A-> first-> next-> next-> next.Это показывает 3, если я делаю A-> first-> next-> next-> next-> next.
Я действительно не понимаю, и это начинает действовать мне на нервы, код прост и коротоки я все еще не вижу ошибки.
Может ли кто-нибудь мне помочь?Спасибо.