Я писал программу, чтобы вернуть строку, содержащую конкатенацию всех строк в узлах связанного списка, до тех пор, пока общий размер конкатенированной строки не будет равен определенному числу байтов. Но значение переменной цикла становится мусором в последней итерации. Может ли кто-нибудь сказать мне, почему?переменная цикла показывает значение мусора
typedef struct li {
char *data;
int len; //structure for the linked list
struct li *next;
} node ;
node *head;
void create()
{
int i,n;
char num[100]; //the value of i when equal to n-1 becomes garbage
//of the proper n-1
node *temp;
printf("enter the number of nodes\n");
scanf("%d",&n); //supposed to create the list
printf("n=%d",n);
printf("enter the strings to be kept in the nodes\n");
for(i=0;i<n;i++) {
if(i==0) {
head=(node*)malloc(sizeof(node));
temp=head;
}
else {
temp->next=(node*)malloc(sizeof(node));
temp=temp->next;
}
scanf("%s",num);
temp->data=num;
temp->len=strlen(num);
//in the final loop shows error as value of i becomes garbage
}
temp->next=NULL;
}
void g(int n)
{
int t=0,m; //the main logic
char *f={'\0'};
node *temp;
temp=head;
while(temp!=NULL && t!=n) {
m=sizeof(temp->data);
strcat(f,temp->data);
t+=m;
temp=temp->next;
}
}
У вас есть утечка памяти. Когда выделен последний узел, вы все равно выделяете 'temp-> next', а затем просто присваиваете' NULL' 'temp-> next', не освобождая память. –
В функции 'g()', вероятно, вам нужно использовать 'strlen (temp-> data)' вместо 'sizeof (temp-> data)', поскольку значение 'sizeof()' является константой времени компиляции, и вы 'конкатенирование строк переменной длины. Вам также нужно выделить хранилище для функции 'f' в функции, возможно, через' malloc() '. –
Показать полный код! –