读书人

求大神指点这个关于指针的有关问题

发布时间: 2012-04-22 18:34:46 作者: rapoo

求大神指点这个关于指针的问题
#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吧

C/C++ code
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);
}
}

[解决办法]
C/C++ code
#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;        }} 

读书人网 >C语言

热点推荐