| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3684 人关注过本帖
标题:求助,无法输出结果,编译可以过
只看楼主 加入收藏
q452953979
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2016-1-4
收藏
得分:0 
回复 6楼 TonyDeng
void sort(char *ptr[],int n,int *minlenPtr,int *maxlenPtr)
{
    int i;
    int len[n];
    for(i=0;i<=n-1;i++)
    {   

        len[i]=strlen(&ptr[i]);
        if(len[i]>*maxlenPtr)
            *maxlenPtr=len[i];
        if(len[i]<*minlenPtr)
            *minlenPtr=len[i];
    }
    RecurSelectSort(len,n);   
}


这个sort函数调试的时候说是越界了,就是for里面的第一个语句,这是为什么
2016-01-04 17:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你那ptr的數據都未必正確,自己嘗試查看它到底存放了什麽,才能知道錯誤原因。這種調試功夫,才是應該學的,別人替你調試了對你無益。

授人以渔,不授人以鱼。
2016-01-04 18:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
正確實現了第一個功能,第二、第三個都不是問題。留意我是怎麽寫代碼檢查函數功能的,調試的代碼,可以在調通之後刪除,但若不調,程序總是寫不好。

[此贴子已经被作者于2016-1-4 18:28编辑过]


授人以渔,不授人以鱼。
2016-01-04 18:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
第二個字符串排序功能,你自己實現
程序代码:
/*
    來源: http://bbs.bccn.net/thread-460816-1-1.html

    題目要求:
    (1) 实现函数char ** readWords(int n),用于从键盘读取n个单词,保存在动态申请
        的字符数组中,字符数组首地址保存在动态申请的指针数组中。返回指针数组首
        元素的地址。
    (2) 实现函数void sort(char * * ptr, int size,int * minlenPtr,int * maxlenPtr),
        用于对单词按照长度的从小到大顺序进行排序,并将单词的最短长度和最长长度分别
        写入minlenPtr和maxlenPtr指向的整形变量中。
    (3) 实现函数void output(char ** ptr,int size),用于输出单词
    (4) 实现函数void freeMemory(char ** ptr,int size),用于释放动态申请的内存,包
        括指针数组和字符数组的内存空间。

    様例:
    Please input the words:
    Where↙
    there↙
    is↙
    hope↙
    a↙
    way↙
    Min length is 1 and max length is 5
    After sort,the words are:
    a
    is
    way
    hope
    Where
    there

    作者: TonyDeng
    日期: 2016.01.04.
    編譯: VC++14 in VS2015
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

// 預定義每個單詞不包含結束字符的最大字符數
// 註:1.不建議使用傳統的#define宏
//     2.建議使用新的size_t類型
const size_t MAX_WORD_LENGTH = 80;

/*
    功能:
    实现函数char ** readWords(int n),用于从键盘读取n个单词,保存在动态申请
    的字符数组中,字符数组首地址保存在动态申请的指针数组中。返回指针数组首
    元素的地址。

    註: 1.不考慮內存申請失敗情形
        2.假定輸入的n在合理數値範圍內
*/
char ** readWords(int n)
{
    char ** pBuffer = (char**)calloc(n, sizeof(char*));
    if (!pBuffer)
    {
        return NULL;
    }

    for (int i = 0; i < n; ++i)
    {
        pBuffer[i] = (char*)calloc(1, MAX_WORD_LENGTH + 1);        // 注意可能遇到申請失敗的情形!
        if (pBuffer[i])
        {
            scanf_s("%s", pBuffer[i], MAX_WORD_LENGTH);
        }
    }

    return pBuffer;
}

// 功能: 輸出數組數據
void output(char ** ptr, int size)
{
    for (int i = 0; i < size; ++i)
    {
        printf_s("%s\n", ptr[size]);
    }
}

// 功能: 釋放內存
void FreeMemory(char ** ptr, int size)
{
    for (int i = 0; i < size; ++i)
    {
        free(ptr[i]);
    }
    free(ptr);
}

int main(void)
{
    int number = 0;
    do
    {
        printf_s("Input n: ");
        rewind(stdin);
    } while (scanf_s("%d", &number) != 1);

    printf_s("Input text:\n");
    char ** data = readWords(number);
    if (data)
    {
        printf_s("\nYour input is:\n");
        output(data, number);
        FreeMemory(data, number);
    }

    printf_s("\nPress any key to continue...");
    _getch();
    return EXIT_SUCCESS;
}


[此贴子已经被作者于2016-1-4 18:34编辑过]


授人以渔,不授人以鱼。
2016-01-04 18:33
快速回复:求助,无法输出结果,编译可以过
数据加载中...
 
   



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

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