关于c语言程序设计的指针的问题。
发布网友
发布时间:2022-05-31 19:21
我来回答
共4个回答
热心网友
时间:2023-10-24 13:20
指针被拷贝了,原来的指针没有交换,改成如下应该接可以了
void sort(char ** p[3])
{
char ** a;
int j,i;
for(i=0;i<2;i++)
for(j=0;j<2-i;j++)
if(strcmp(*p[j],*p[j+1])>0)
{a=p[j];p[j]=p[j+1];p[j+1]=a;}
}
主函数改成:
int main()
{
int i;
void sort(char ** p[3]);
char s0[20],s1[20],s2[20],* p[3];
p[0]=&s0[0];
p[1]=&s1[0];
p[2]=&s2[0];
printf("please enter 3words:\n");
scanf("%s,%s,%s",p[0],p[1],p[2]);
sort(&p);
printf("the sorted word:\n");
printf("%s,%s,%s",p[0],p[1],p[2]);
return 0;
}
热心网友
时间:2023-10-24 13:20
关键在这句
printf("%s,%s,%s",p[0],p[1],p[2]);
读入字符串不能用逗号来分隔,否则逗号会当作字符串保存到p[0]中,而p[1],p[2]都没赋值,改成以下那样就好了
scanf("%s%s%s",p[0],p[1],p[2]);
每输入一个字符串回车
热心网友
时间:2023-10-24 13:21
#include<stdio.h>
#include<string.h>
int main()
{
int i,k=0;
void sort(char * p[3]);
char s0[20],s1[20],s2[20],* p[3];
p[0]=&s0[0];
p[1]=&s1[0];
p[2]=&s2[0];
printf("please enter 3words:\n");
while(k<3)
{
gets(p[k++]);
}
sort(p);
printf("the sorted word:\n");
printf("%s,%s,%s",p[0],p[1],p[2]);
return 0;
}
void sort(char * p[3])
{
char * a;
int j,i;
for(i=0;i<2;i++)
for(j=0;j<2-i;j++)
if(strcmp(p[j],p[j+1])>0)
{a=p[j];p[j]=p[j+1];p[j+1]=a;}
}
热心网友
时间:2023-10-24 13:21
main函数做如下修改即可
int main()
{
int i;
void sort(char * p[3]);
char s0[20],s1[20],s2[20],* p[3];
memset(s0,0,20);
memset(s1,0,20);
memset(s2,0,20);
p[0]=&s0[0];
p[1]=&s1[0];
p[2]=&s2[0];
printf("please enter 3words:\n");
scanf("%s",s0);
scanf("%s",s1);
scanf("%s",s2);
sort(p);
printf("the sorted word:\n");
printf("%s,%s,%s",p[0],p[1],p[2]);
return 0;
}追问vc++里面可以的。想问下memset(*,*,*)这是什么意思关键字哦。
感谢你的回答!!!
追答对你定义的三个数组进行初始化。
不进行初始化的话,会出现异常的。