当前位置: 代码迷 >> C语言 >> 大家看看我的指针数组错在哪里
  详细解决方案

大家看看我的指针数组错在哪里

热度:120   发布时间:2008-04-05 18:18:28.0
大家看看我的指针数组错在哪里
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) 我明白.
我用的就是指针组数.排序只不过是交换的是地址,不是数值.
----------------解决方案--------------------------------------------------------
  相关解决方案