求大神指点这个关于指针的问题
#include "stdio.h"
#include "string.h"
void main()
{void sort(char(*s)[20]);
int i;
char str[10][20];
for(i=0;i<10;i++)
scanf("%s",&str[i]);
sort(str);
for(i=0;i<10;i++)
printf("%s\n",str[i]);
}
void sort(char (*s)[20])
{
int i,j;
char *temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(strcmp(s[j],s[j+1])>0)
{temp=*(s+j);*(s+j)=*(s+j+1);*(s+j+1)=temp;}
}
运行显示错误在最后一行,麻烦指点一下哪里错了,为什么?
[解决办法]
估计是数组越界
[解决办法]
要用strcpy吧
void sort(char (*s)[20]){ int i,j; char temp[20]; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(s[j],s[j+1])>0) { strcpy(temp,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],temp); }}
[解决办法]
*(s+j+1)=temp;
类似
int arr[10];
int *t;
arr=t;
主要是数组是不能被赋值的左值。
这里,改为 strcpy吧。
void sort(char (*s)[20])
{
int i,j;
char *temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(strcmp(s[j],s[j+1])>0)
{temp=*(s+j);*(s+j)=*(s+j+1);*(s+j+1)=temp;}
}
==》
void sort(char (*s)[20])
{
int i,j;
char temp[20];
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(strcmp(s[j],s[j+1])>0)
{strcpy(temp,*(s+j));
strcpy(*(s+j),*(s+j+1));
strcpy(*(s+j+1),temp);
}
}
[解决办法]
#include "stdio.h"#include "string.h"void sort(char*s[]);//传递的参数为指针数组void main(){ int i; char str[10][20]; char *s[10];//定义指针数组 for(i=0;i<10;i++) { scanf("%s",&str[i]); s[i]=str[i];//给指针数组赋值 } sort(s); for(i=0;i<10;i++) printf("%s\n",s[i]);//打印指针数组的值 }void sort(char *s[]){ int i,j; char *temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(s[j],s[j+1])>0) { temp=*(s+j);*(s+j)=*(s+j+1);*(s+j+1)=temp; }}