| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 877 人关注过本帖
标题:用指针写了个用指针对3个字符串由小到大排序的题目,但是总是没找到哪错了, ...
只看楼主 加入收藏
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
结帖率:87.5%
  已结贴   问题点数:10  回复次数:13   
用指针写了个用指针对3个字符串由小到大排序的题目,但是总是没找到哪错了,求解
程序代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
    void swap(char *p1,char *p2);
    char strings[3][80] = { "I study very hard.", "C language is very interesting.", "He is a professfor." };
    int i;
    swap(strings[0],strings[1]);
    swap(strings[0],strings[2]);
    swap(strings[1],strings[2]);
    for (i = 0; i <= 2; i++)
    {
        printf("%s\n", strings[i]);
    }
    system("pause");
    return 0;
}

void swap(char *p1, char *p2)
{
    char *temp = NULL;
    if (strcmp(p1, p2) > 0)
    {
        strcpy(temp,p1);
        strcpy(p1,p2);
        strcpy(p2,temp);
    }
}



编译器是这样反馈的信息

[ 本帖最后由 firewater 于 2015-2-25 22:53 编辑 ]
附件: 您没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: 字符串  
2015-02-25 22:48
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
  得分:0 
搞了半天,没明白这个问题
2015-02-25 22:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
注 册:2011-6-22
  得分:8 
又是把指針當字符串(數組)的經典錯誤。你那temp是什麽東西?有多大的空間?

授人以渔,不授人以鱼。
2015-02-25 22:52
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
  得分:0 
回复 3楼 TonyDeng
我把strcpy函数的参数搞错了,我又翻了下书,strcpy(字符数组1,字符数组2)    中的字符数组1必须定义得足够大,以便容纳复制的字符串。而我的temp是指针变量,并不能存放字符串,是这样理解吗?
我是把它和指针数组搞混了。基础不牢,多谢指教。
2015-02-25 23:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
注 册:2011-6-22
  得分:0 
指針衹是一個指示器,它指向的對象必須滿足你的使用需求。strcpy()要求一個足夠大的儲存空間,而你的temp卻是指向NULL的空指針,它被解釋爲哪都不指向,更別說空間是否足夠了。乖乖地用字符串char temp[足夠大的數值]吧,那個temp在參數傳遞後就被視爲指針,并不需要你在這裏刻意使用指向未分配空間的指針,要麽你用malloc()給temp申請内存再使用。

指針的訓練不是這樣的。


[ 本帖最后由 TonyDeng 于 2015-2-25 23:17 编辑 ]

授人以渔,不授人以鱼。
2015-02-25 23:16
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
  得分:0 
回复 5楼 TonyDeng
我是在做谭浩强那本书上的习题,请问有必要写那本书上的习题吗,还是做c和指针里的习题......
2015-02-25 23:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
注 册:2011-6-22
  得分:0 
做什麽題都可以,關鍵是怎麽做。有的時候,題目要求你用指針做,但不表示要你那樣實現。

授人以渔,不授人以鱼。
2015-02-25 23:37
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
  得分:1 
程序代码:

#include <stdio.h>
#include <string.h>
#define SIZE 80
#define LIM 3

void sortLines(char *pstr[]) {
    char *ptemp;
    int i, j;

    for(i = 0; i < LIM - 1; i++) {
        for(j = i + 1; j < LIM; j++) {
            if(strcmp(pstr[i], pstr[j]) > 0) {
                ptemp = pstr[i];
                pstr[i] = pstr[j];
                pstr[j] = ptemp;
            }
        }
    }
}

int main(void) {
    char strings[LIM][SIZE] = {
        "I study very hard.",
        "C language is very interesting.",
        "He is a professfor."
    };
    char *pstr[LIM];
    int i;

    for(i = 0; i < LIM; i++) pstr[i] = strings[i];

    sortLines(pstr);

    for(i = 0; i < LIM; i++) puts(pstr[i]);

    return 0;
}


Only the Code Tells the Truth             K.I.S.S
2015-02-25 23:37
firewater
Rank: 1
等 级:新手上路
帖 子:47
专家分:4
注 册:2014-7-13
  得分:0 
回复 7楼 TonyDeng
8楼的那种解法我也做了,不过书上的答案是用我贴出来的那种方法写的,所以我就用那种方法写了。
2015-02-25 23:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
注 册:2011-6-22
  得分:0 
答案怎麽可能用你那種,那是必然崩潰的,寫答案的那個人自己也沒測試過自己的代碼吧。你自己都做出來崩潰了,還答什麽案。

授人以渔,不授人以鱼。
2015-02-25 23:52







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

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