0

我正在编写一个程序来返回一个字符串,该字符串具有链表节点中所有字符串的串联,直到串联字符串的总大小不等于特定的字节数。但是循环变量的值在最后一次迭代中变成了垃圾。谁能告诉我为什么?

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

}
4

1 回答 1

2

您用于scanf从用户读取字符串,并将其放入本地数组中。第一个问题是你让所有节点指针都指向这个本地数组。第二个问题是它是一个局部变量,一旦函数返回就无效。

解决这个问题的最简单方法是使用strdup函数来复制字符串。请记住,您必须使用free该文本。

于 2013-08-17T14:33:56.083 回答