user-0 提问: 数据结构—顺序表元素的逆置。代码编译没问题，但是程序不运行。请指教！！！

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:#include <stdio.h> #include <stdlib.h>  #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10  typedef struct{     char *elem;     int length;     int listsize; }Sqlist;  void InitList_Sq(Sqlist *L)  //构造一个空线性表 {     L->elem = (char*)malloc(LIST_INIT_SIZE*sizeof(char));     if(!L->elem)     {         printf("ERROR!");         exit(1);     }     L->length=0;     L->listsize=LIST_INIT_SIZE; }  void inversion(Sqlist *L) {     char *p,*q,t=0;     p=L->elem;     q=L->elem+L->length-1;     while(p<q)     {         t=*p;         *p=*q;         *q=t;     } } int main() {     Sqlist *L;     int i=0;     char c;      L = (Sqlist *)malloc(sizeof(*L));     if (!L)         exit(0);      InitList_Sq(L);     do{         printf("请输入一个字母（'/'退出循环）：\n");         scanf("%c",&c);         if((L->length+1)>L->listsize) //顺序表已满，重新分配空间         {             L->elem=(char*)realloc(L->elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(char));             if(!L->elem)             {                 printf("ERROR!");                 exit(1);             }             L->length=i;             L->listsize=LIST_INIT_SIZE+LISTINCREMENT;         }         if((c>='a'&&c<='z')||(c>='A'&&c<='Z')||c=='/')         {             *(L->elem+i)=c;             i++;             L->length=i;         }         else printf("输入错误！请输入字母！\n");      }while(c!='/');      if(L->length==0) printf("\n未输入元素，无法逆置");     else if(L->length==1) printf("\n只有一个元素%c，无法逆置",*(L->elem));     else{         inversion(L);         printf("元素逆置为：\n");         for(i=0;i<L->length;i++)             printf("%c ",*(L->elem+i));     } } 供参考～ 感谢！程序可以运行出来了，但是不太理解为什么InitList (L)前要这样先赋地址，而且sizeof (*L)为什么是*L呢？InitList后L的地址是不是又是另外一个新地址呢？？希望可以解答一下！谢谢

user: user-0
content: 引用 3 楼 qzjhjxj的回复:输入字符时，增加一个getchar()函数：    do{         printf("请输入一个字母（'/'退出循环）：\n");         scanf("%c",&c);         getchar();      //吃掉多余字符         if((L->length+1)>L->listsize) //顺序表已满，重新分配空间 这个真是帮了我大忙了！！好几个程序都有相似的错误 ，但是想知道什么情况下需要用getchar（）来吃掉多余的字符啊，之前没这样用的时候没出现过这样的问题，自从写数据结构实验的题，总是出现这个问题。

user: user-0
content: 感谢！程序可以运行出来了，但是不太理解为什么InitList (L)前要这样先赋地址，而且sizeof (*L)为什么是*L呢？InitList后L的地址是不是又是另外一个新地址呢？？希望可以解答一下！谢谢！！

user: user-1
content: 偷鸡 放到数组逆序输出[face]

user: user-2
content: 输入字符时，增加一个getchar()函数：    do{         printf("请输入一个字母（'/'退出循环）：\n");         scanf("%c",&c);         getchar();      //吃掉多余字符         if((L->length+1)>L->listsize) //顺序表已满，重新分配空间

user: user-2
content: 楼主，逆置函数还是有问题，修改如下，供参考：void inversion(Sqlist *L) {     char *p,*q,t=0;     p=L->elem;     q=L->elem + L->length-1-1;//末尾'/’不逆置     while(p<q)     {         t=*p;         *p=*q;         *q=t;         p++; //指针移动         q--;     } }

user: user-3
content: #include <stdio.h> #include <stdlib.h>  #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10  typedef struct{     char *elem;     int length;     int listsize; }Sqlist;  void InitList_Sq(Sqlist *L)  //构造一个空线性表 {     L->elem = (char*)malloc(LIST_INIT_SIZE*sizeof(char));     if(!L->elem)     {         printf("ERROR!");         exit(1);     }     L->length=0;     L->listsize=LIST_INIT_SIZE; }  void inversion(Sqlist *L) {     char *p,*q,t=0;     p=L->elem;     q=L->elem+L->length-1;     while(p<q)     {         t=*p;         *p=*q;         *q=t;     } } int main() {     Sqlist *L;     int i=0;     char c;      L = (Sqlist *)malloc(sizeof(*L));     if (!L)         exit(0);      InitList_Sq(L);     do{         printf("请输入一个字母（'/'退出循环）：\n");         scanf("%c",&c);         if((L->length+1)>L->listsize) //顺序表已满，重新分配空间         {             L->elem=(char*)realloc(L->elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(char));             if(!L->elem)             {                 printf("ERROR!");                 exit(1);             }             L->length=i;             L->listsize=LIST_INIT_SIZE+LISTINCREMENT;         }         if((c>='a'&&c<='z')||(c>='A'&&c<='Z')||c=='/')         {             *(L->elem+i)=c;             i++;             L->length=i;         }         else printf("输入错误！请输入字母！\n");      }while(c!='/');      if(L->length==0) printf("\n未输入元素，无法逆置");     else if(L->length==1) printf("\n只有一个元素%c，无法逆置",*(L->elem));     else{         inversion(L);         printf("元素逆置为：\n");         for(i=0;i<L->length;i++)             printf("%c ",*(L->elem+i));     } } 供参考～