【100分悬赏】各位学C懂C语言的兄弟姐妹们,能帮我看看这两个程序哪里出错了吗??

2024-11-17 19:23:57
推荐回答(2个)
回答1:

#include
#include
void sort(char **p,int n)
{
char *temp;
int i,j,k;
for(i=0;i{
k=i;
for(j=i+1;j{
if(strcmp(*(p+k),*(p+j))>0)
k=j;
if(k!=i)
{
temp=*(p+i);
*(p+i)=*(p+k);
*(p+k)=temp;
}}}}
int main()
{
char *name[10]={"america","word","c programming","basic","a"};
char **p;
int i;
p=name; //问题一 ,必须初始化p
for(i=0;i<10;i++)
*(p+i)=name[i];
sort(p,5); //问题二 ,你排序的字符串只有5个
for(i=0;i<5;i++) //问题三
puts(name[i]);
return 0;
}

问题二
//
// 第二个程序是,试用字符指针定义函数strcpy(s,t,m),将字符串t中从第m个字符开始的全部字符复制到字符串s中。。。
//
// 我是这么编的
#include
void strcpy(char *s,char *t,int m)
{
int i,j;
for(i=m-1,j=0;t[i]!='\0';i++,j++)
*(s+j)=*(t+i);
*(s+j)='\0';
}

int main()
{
char s[81],t[81];
int m;
gets(t); //这个有问题
scanf("%d",&m); //这里& ,最好先输入字符串,再输入数字
strcpy(s,t,m);
printf("%s",s);
return 0;
}

回答2:

第一题
1.
把if(strcmp(*(p+k),*(p+j)>0)改成 if(strcmp(*(p+k),*(p+j))>0)
2.把主函数改成:
int main()
{
int i;
char *name[10]={"america","word","c programming","basic","a"};
char **p=name;

sort(p,5);
for(i=0;i<5;i++)
puts(name[i]);
return 0;
}
第二题:
1.strcpy是系统库函数,把名字改成cpy或者和库函数名字不同的合法标识符。
2。scanf("%d",m);改成scanf("%d",&m);