这是我写的一个从小到大输出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;}
}
}
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;}
}
}
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);
}
指针char *p[3];未分配空间,你可声明为char p[3]即可.
char p[3]是字符数组,可是不一样啊?如果用这个,那么能否用scanf("%S",p+i);吗?并且调用语句还能否用change(p,3)?