标题:大家来找茬 程序改错
只看楼主
界水乘风
该用户已被删除
 问题点数:0 回复次数:15 
大家来找茬 程序改错
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: STRING 数字 字母 include ARRAY 
2008-06-16 10:28
zhangjilie
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-16
得分:0 
为什么我一个都没看出来呢?
哪位高手说说啊?
2008-06-16 10:58
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
哇靠,这程序实在极品
看了一下,发现一个错误
VC编译一下,有两个warning,其实是错误
单步执行了几次,发现三个错误

不知道还有没有....

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-06-16 11:07
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
得分:0 
1: while(*str != NULL)
字符串的结束应该是‘\0’,不是NULL吧?

2:return ret;
ret是一个局部变量,在方法结束之后,该数组已经被释放,指到了意想不到的位置;

3:既然用了malloc,那么应该#include  <malloc.h>吧?

4:GetMemory(pAll);
真的能给pAll分配空间么?

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-06-16 11:08
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STRING "FdfsJK32f47h5"
#define PRINT_ARRAY(x) if((x) != NULL) printf("%s\n", (x))

void LowToUp(char * str)
{
    while(*str != NULL)
    {
        if((*str >= 'a')&&(*str <= 'z'))
        {
            *str += 'A' - 'a';//错误一,运行时发现
        }
        str++;
    }
}

int GetMemory(char* p)//错误二,目测发现
{
    p = (char*)malloc(strlen(STRING));//错误三,单步时发现
    if(p == NULL) return -1;
    else return 1;
}

char * GetNumber(char * str)
{
    char ret[100];
    int i = 0;
    while(*str != NULL)
    {
        if((*str >= '0')&&(*str <= '9'))
        {
            ret[i++] = *str;
        }
        str++;
    }
    ret[i] = '\0';
    return ret;//错误四,编译时发现
}

char * GetLetter(char * str)
{
    char ret[100];
    int i = 0;
    while(*str != NULL)
    {
        if((*str >= 'A')&&(*str <= 'Z'))
        {
            ret[i++] = *str;
        }
        str++;
    }
    ret[i] = '\0';
    return ret;//错误五,编译时发现
}

int main()
{
    char *pAll=NULL;
    char *pNumber=NULL;
    char *pLetter=NULL;

    LowToUp(STRING);    //1. 将串中小写字符转化成大写
    if(GetMemory(pAll) == 1)    //内存分配
    {
        strcpy(pAll, STRING);
        pNumber = GetNumber(pAll);    //2. 提取出所有数字
        pLetter = GetLetter(pAll);    //3. 提取出所有字母
        if((pAll[0] >= '0')&&(pAll[0] <= '9')) PRINT_ARRAY(pNumber);    //错误六,单步了几次才发现
        else PRINT_ARRAY(pLetter);
        free(pAll);
        return 1;
    }
    else
    {
        printf("No Memory can be used!\n");
        return -1;
    }
}

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-06-16 11:11
界水乘风
该用户已被删除
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-06-16 11:34
zhangjilie
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-16
得分:0 
听不懂啊
2008-06-16 12:05
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STRING "FdfsJK32f47h5"  //常量存储区,不能被修改
#define PRINT_ARRAY(x) if((x) != NULL) printf("%s\n", (x))

void LowToUp(char * str)
{
    while(*str != NULL)
    {
        if((*str >= 'a')&&(*str <= 'z'))
        {
            *str += 'A' - 'a';
        }
        str++;
    }
}

int GetMemory(char* p)  //如果是以空指针传入,则内存丢失
{
    p = (char*)malloc(strlen(STRING));
    if(p == NULL) return -1;
    else return 1;
}

char * GetNumber(char * str)
{
    char ret[100];
    int i = 0;
    while(*str != NULL)
    {
        if((*str >= '0')&&(*str <= '9'))
        {
            ret[i++] = *str;
        }
        str++;
    }
    ret[i] = '\0';
    return ret;   //返回局部变量,外部指针指向该区域时,已释放...但是内容可能保留,所以可能输出结果..
}

char * GetLetter(char * str)
{
    char ret[100];
    int i = 0;
    while(*str != NULL)
    {
        if((*str >= 'A')&&(*str <= 'Z'))
        {
            ret[i++] = *str;
        }
        str++;
    }
    ret[i] = '\0';
    return ret;  //返回局部变量,外部指针指向该区域时,已释放...但是内容可能保留,所以可能输出结果..
}

int main()
{ //看了别人找的,发现自己还差很多 - -
    char *pAll=NULL;
    char *pNumber=NULL;
    char *pLetter=NULL;
    LowToUp(STRING);    //1. 将串中小写字符转化成大写
    if(GetMemory(pAll) == 1)    //内存分配
    {
        strcpy(pAll, STRING);
        pNumber = GetNumber(pAll);  //2. 提取出所有数字
        pLetter = GetLetter(pAll);    //3. 提取出所有字母
        if((pAll[0] >= '0')&&(pAll[0] <= '9')) PRINT_ARRAY(pNumber);    //打印
        else PRINT_ARRAY(pLetter);
        free(pAll);
        return 1;
    }
    else
    {
        printf("No Memory can be used!\n");
        return -1;
    }
}

[[it] 本帖最后由 中学者 于 2008-6-16 13:27 编辑 [/it]]

[[it] 本帖最后由 中学者 于 2008-6-16 13:28 编辑 [/it]]

樱花大战,  有爱.
2008-06-16 13:26
zhangjilie
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-16
得分:0 
怎么都是没有听过的错误
2008-06-16 13:56
zhangjilie
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-6-16
得分:0 
那应该怎么写呢?
2008-06-16 17:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-219388-1-1.html




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

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