| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1072 人关注过本帖
标题:C语言指针:我这道题哪里错了?
只看楼主 加入收藏
EricZhan
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2010-7-9
结帖率:86.67%
收藏
 问题点数:0 回复次数:15 
C语言指针:我这道题哪里错了?
把字符从小到大的顺序排起来.
#include "stdio.h"
#include "string.h"
int bb(char*a[],int n)
{ int b,k,i;
    char *temp;
    for(b=0;b<n-1;b++)
    {for(k=b+1;k<n;k++)
        {
            i=strcmp(a[b],a[k]);
            if(i>0)
        {temp=a[k];a[k]=a[b];a[b]=temp;}
    }
    }
    }   
void main()
{
    char *a[3]={"ok","zhan","year"};
    int n=3;
    bb(a,n);
    for(n=0;n<3;n++)
    printf("%s\n",a[n]);
}
搜索更多相关主题的帖子: C语言 指针 
2010-07-28 22:59
tedfare
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2010-7-28
收藏
得分:0 
我这里编译通过,对的呢,你的意思是把字符串从小到大排列吧
2010-07-28 23:16
ryanlq
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-7-28
收藏
得分:0 
bb函数没有返回值
2010-07-29 00:26
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
他有两层 for 多加一层也没事。
2010-07-29 00:45
EricZhan
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2010-7-9
收藏
得分:0 
以下是引用tedfare在2010-7-28 23:16:36的发言:

我这里编译通过,对的呢,你的意思是把字符串从小到大排列吧
太奇怪了,昨天我试还是顺序不变的,今天一试就OK了.
2010-07-29 08:02
EricZhan
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2010-7-9
收藏
得分:0 
我改了由操作作自己输入三个字符串
#include "stdio.h"
#include "string.h"
int bb(char*a[],int n)
{ int b,k,i;
    char *temp;
    for(b=0;b<n-1;b++)
    {for(k=b+1;k<n;k++)
        {
            i=strcmp(a[b],a[k]);
            if(i>0)
        {temp=a[k];a[k]=a[b];a[b]=temp;}
    }
    }
    }   
void main()
{
    char *a[3];
    int n=3,i;
    for(i=0;i<3;i++)
    scanf("%s",a[i]);
    bb(a,n);
    for(n=0;n<3;n++)
    printf("%s\n",a[n]);
    getch();
}

在win-tc中能运行,但是在那个C语言实验系统中就出错了,这是为什么?
2010-07-29 08:20
Rexfield
Rank: 6Rank: 6
来 自:幻想乡
等 级:侠之大者
威 望:1
帖 子:240
专家分:484
注 册:2010-7-28
收藏
得分:0 
gcc表示一直没有问题。

If you're not failing every now and again, it's a sign you're not doing anything very innovative.
2010-07-29 08:25
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:0 
贴在1楼的程序是对的没有问题,唯一一点要注意的是,bb函数后面加个返回值,也就是return。
当然你不加也可以运行,只是这个不是一个编程的好习惯。
贴在7楼的程序是错的,主要是下面的语句不对:
 for(i=0;i<3;i++)
    scanf("%s",a[i]);     
之前你只是定义了一个指针数组a[3],并没有给a[i]分配任何内存.
他们在内存中占据4个字节的空间,用来存放的是他指向字符串的首地址。
而你现在要在a[i]中存入你输入的字符串,显然是不行的。
当然如果你还想这样做,改成下面这样就行了:
 for(i=0;i<3;i++)
    {
        a[i] = (char *)malloc(sizeof(char)*20);
        scanf("%s",a[i]);
    }

2010-07-29 09:08
EricZhan
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2010-7-9
收藏
得分:0 
回复 9楼 erikyo
我就是在这里迷惑不解了,但程序的确可以运行int *a[]可以赋值,我不明白这是为什么?还有字符型的也一样char *a为什么也能赋值,如*a="xxxxx".没有分配空间,它们如何储存?
2010-07-29 14:18
gaoxu1990
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-7-29
收藏
得分:0 
bb没有返回值 ,我把前面的int 改成void就行了  你试试
2010-07-29 15:15
快速回复:C语言指针:我这道题哪里错了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016627 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved