|  | 
 
| 
本帖最后由 工科男 于 2016-7-30 20:32 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 自认为看了好久的指针,结果拿书做一个练习题,满满的都是打击。
 请大神帮我看一下,这个程序错在哪里了。
 我主要是想定义一个二维数组,用来存放字符串,
 然后利用 strlen 函数比较字符串的长度。
 但是电脑奔溃了了、。
 指针,想说爱你不容易啊。
 主函数没有什么问题
 
 复制代码主函数如下:
#include <stdio.h>
#include <string.h>
int main ()
{
        void swap(char (*)[100],int);    //声明一个子函数,比较字符串大小
        char (*p)[100];                  //定义一个数组指针
        char str[3][100];             //定义一个子二维字符数组,用于3个字符串的存放
        int i ;
        p=str;
        printf("input three strings:\n");
        for(i=0;i<3;i++)
                gets(str[i]);            //用gets函数输入字符串
        swap(str,3);
        for(i=0;i<3;i++)
                printf("%s ",*p++);
        return 0;
}
请大家帮我看一下以下两个关于字符串大小比较的子函数的编写方法
 
 复制代码第一种
子函数编写方法
利用赋值语句:
void swap(char (*x)[100],int n)
{
    
        int i,j,k;
        char q100];                           //我也试过用 char (*q)[100]来定义
        for (i=0;i<n-1;i++)               //但是也是错误,求解错误原因
        {
                k=i;
                for(j=i+1;j<n;j++)
                        if((int)strlen(*(x+k))<(int)strlen(*(x+j))) 
                                k=j;                       
                        if(k!=i);
                        {        q=*(x+i);          //问题就出在 if 语句这里了,
                            (x+i)=*(x+k);        //编译的时候,总是提示left operand must be l-value     
                            *(x+k)=q;             //翻译过来,就是左值必须是变量。我不清楚哪里出错了。
                        }                               //求解错因。
        }
}
 
 
 复制代码第二种
子函数编写方法:
利用strcmp函数
void swap(char (*x)[100],int n)
{
    int i,j,k;
char q[100];
        for (i=0;i<n-1;i++)
        {
                k=i;
                for(j=i+1;j<n;j++)
                        if((int)strlen(*(x+k))<(int)strlen(*(x+j))) 
                                k=j;                       
                        if(k!=i);
                        {        
                                strcpy(q,*(x+i));
                                strcpy(*(x+i),*(x+k));            //这一种编写方法运行结果正常        
                                strcpy(*(x+k),q);
                        }
}
}
 请大家伙帮我重点看一下,差别好像只有16,17,18行。第一种方法错在哪里了,应该如何改正,望告知。因为那是我编写的。先谢谢大家啦
 
 
 | 
 |