大家看看我的指针数组错在哪里
VC下编译正确,就是在输入字符串时内存出错:#include "stdio.h"
#include "conio.h"
#include "string.h"
int sort(char * si[], int n)
{
int m;
for(int i=0;i<2;i++)
{
for(int j=i+1;j<3;j++)
if (strcmp(si,si[i+1])>0)
m=i+1;
if(i!=m)
{
char temp=*si;
*si=*si[m];
*si[m]=temp;
}
}
return 0;
}
int inPut(char * s[])
{
for(int i=0;i<3;i++)
scanf("%s",s);
return 0;
}
int Print(char * c[])
{
for(int i=0;i<3;i++)
printf("%s\n",c);
return 0;
}
int main()
{
char *ch[3];
inPut(ch);
sort(ch,3);
getch();
return 0;
}
搜索更多相关的解决方案:
指针
----------------解决方案--------------------------------------------------------
个人觉得,问题较多
int inPut(char * s[])
{
for(int i=0;i<3;i++,s++)// 因该s++,否则真正输入的是最后一次的
{
scanf("%s",s);
printf("=%s\n",s);
}
return 0;
}
int Print(char * c[])
{
for(int i=0;i<3;i++,c++) // 因该c++,否则输出的永远是一个值
printf("%s\n",c);
return 0;
}
还有,你的ch指针数组并没有分得内存,同时你的排序处的指针类型不对.
----------------解决方案--------------------------------------------------------
缩进为何这样?
用的制表符吧。
[[it] 本帖最后由 cosdos 于 2008-4-5 19:27 编辑 [/it]]
----------------解决方案--------------------------------------------------------
二楼的朋友回答是错误的啊..编译通不过啊
----------------解决方案--------------------------------------------------------
当然不能通过了.
我不是说过你的排序函数内的指针类型不对吗,就是因为类型不匹才不能通过
----------------解决方案--------------------------------------------------------
int inPut(char * s[])
{
for(int i=0;i<3;i++)
scanf("%s",s[i]);
return 0;
}
int Print(char * c[])
{
for(int i=0;i<3;i++)
printf("%s\n",c[i]);
return 0;
}
这样应该可以了吧,如果lz改掉了2楼说的分配内存和排序的错
书上说根据优先级,在char *ch[3]中ch先与[]结合,相当于定义一个数组,再与*结合,表示数组是指针类型的,相当于定义了一个存放指针变量的数组,数组的每个元素是一个指针变量
----------------解决方案--------------------------------------------------------
#include "stdio.h"
#include "conio.h"
#include "string.h"
int sort(char * si[], int n) //数组传递应该sort(char si[],int n),或者这么写
//sort(int *p,int n)
{
int m;
for(int i=0;i<2;i++) //第一i在C中不能这么定义,必须先年个定义
{
for(int j=i+1;j<3;j++)
if (strcmp(si,si[i+1])>0)
m=i+1;
if(i!=m)
{
char temp=*si;
*si=*si[m];
*si[m]=temp;
}
}
return 0;
}
int inPut(char * s[])
{
for(int i=0;i<3;i++) //同样的错误,C不同于java
scanf("%s",s);
return 0;
}
int Print(char * c[])
{
for(int i=0;i<3;i++) //基本一个错误,不说了,自己看吧
printf("%s\n",c);
return 0;
}
int main()
{
char *ch[3];
inPut(ch);
sort(ch,3);
getch();
return 0;
}
----------------解决方案--------------------------------------------------------
楼上朋友你的函数sort(int *p,int n) 我明白.
我用的就是指针组数.排序只不过是交换的是地址,不是数值.
----------------解决方案--------------------------------------------------------