为什么我一个都没看出来呢?
哪位高手说说啊?
----------------解决方案--------------------------------------------------------
哇靠,这程序实在极品
看了一下,发现一个错误
VC编译一下,有两个warning,其实是错误
单步执行了几次,发现三个错误
不知道还有没有....
----------------解决方案--------------------------------------------------------
1: while(*str != NULL)
字符串的结束应该是‘\0’,不是NULL吧?
2:return ret;
ret是一个局部变量,在方法结束之后,该数组已经被释放,指到了意想不到的位置;
3:既然用了malloc,那么应该#include <malloc.h>吧?
4:GetMemory(pAll);
真的能给pAll分配空间么?
----------------解决方案--------------------------------------------------------
#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;
}
}
----------------解决方案--------------------------------------------------------
哪位高手说说啊?
----------------解决方案--------------------------------------------------------
哇靠,这程序实在极品
看了一下,发现一个错误
VC编译一下,有两个warning,其实是错误
单步执行了几次,发现三个错误
不知道还有没有....
----------------解决方案--------------------------------------------------------
1: while(*str != NULL)
字符串的结束应该是‘\0’,不是NULL吧?
2:return ret;
ret是一个局部变量,在方法结束之后,该数组已经被释放,指到了意想不到的位置;
3:既然用了malloc,那么应该#include <malloc.h>吧?
4:GetMemory(pAll);
真的能给pAll分配空间么?
----------------解决方案--------------------------------------------------------
#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;
}
}
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽