这是我写的一个从小到大输出3个字符串的程序,老调试不过,我知有错误,可就是找不到,希望哪位大哥能帮个忙,详细指正一下,最好能改的精短一些!谢谢 第7行和12行有错,但我不知错在哪儿?麻烦诸位!建议用C,困本人刚学C,不会C++,谢谢  
main()  
{void  change(char *,int);  
 int  i=0;  
 char  *p[3];  
 for(;i<3;i++)  
   scanf("%s",p+i);这一行我想因为是指针数组,不是不定义的情况下能否直接用些输入,是不是会出现内存泄露?  
 change(p,3);这一行有警告:  
 for(i=0;i<3;i++)  
   printf("%s\n",p+i);  
}  
void  change(char  *name[],int  n)  
{int  m=0,k,j;这里提示:ytpe  mismatch  in  redeclaration  of  'change'本人不懂英文哦:)  
 char  *p2;  
 for(;m<n-1;m++)  
   {k=m;  
     for(j=m+1;j<n;j++)  
       if(strcmp(name[k],name[j])>0)  k=j;  
     if(k!=m)  
           {p2=name[k];name[k]=name[m];name[m]=p2;}  
   }  
}

解决方案 »

  1.   

    mismatch  in  redeclaration  of  'change' 是说change函数声明和定义的函数列表不匹配。 char* 和 char  *name[]是不同的。
      

  2.   


    main函数中是void  change(char *,int);
    而后面的实现是void  change(char  *name[],int  n)
    想一下第一个参数的类型???char  *p[3];
    没有分配内存喔main函数中把void  change(char *,int);改做
    void  change(char **,int);

    void  change(char *[],int);
    试试
    main()  
    {
     void  change(char **,int);  
     int  i=0;  
     char pTem[900];        // 分配900字节
     memset(pTem, 0, 900);  // 初始化所分配的内存
     char  *p[3];  
     p[0] = pTem;           // 这连续3行使3个字符串各占300字节
     p[0] = pTem + 300;
     p[0] = pTem + 600;
     for(;i<3;i++)  
       scanf("%s",p+i); 
     change(p,3);
     for(i=0;i<3;i++)  
       printf("%s\n",p+i);  
    }  
      

  3.   

    把void  change(char *,int);  申明放到 main之前
    指针char  *p[3];未分配空间,你可声明为char p[3]即可.
      

  4.   

    楼上的大哥:char  *p[3]是指针数组,就是说数组无素是地址,
        char p[3]是字符数组,可是不一样啊?如果用这个,那么能否用scanf("%S",p+i);吗?并且调用语句还能否用change(p,3)?