大家来帮小弟我挑一上这个程序的毛病

大家来帮我挑一下这个程序的毛病
自己动手写了个小程序,总觉得别扭,有的地方有问题,有的地方也可以优化,还请各位高手们帮帮忙。

#include "stdafx.h"
#include "string.h"
#include <iostream>

#define MAX 100
#define ASCIIMIN 97
#define ASCIIMAX 122

using namespace std;

void strcopy(char str1[], char str2[])
{
int i = 0;
int j = 0;
for(i=0; i<strlen(str2); i++)
{
if(str2[i]>='a' && str2[i]<='z')
{
str1[j] = str2[i];
j++;
}
}
str1[j] = '\0';
}

int main(int argc, char* argv[])
{
printf("Please input one string():\n");
int n_num[MAX]={0};
int i;
int j;
char c_char[MAX];
char c_ch[MAX];
char temp;
gets(c_char);

strcopy(c_ch, c_char);

for(i=0; c_char[i]!='\0'; i++)
{

for(j=i+1; j<strlen(c_ch); j++)
{
if(c_ch[i] > c_ch[j])
{
temp = c_ch[i];
c_ch[i] = c_ch[j];
c_ch[j] = temp;
}
}

if(c_char[i]>=ASCIIMIN && c_char[i]<=ASCIIMAX)
{
n_num[c_char[i] - ASCIIMIN]++;  /*取得每个小写字母出现的个数*/
}
}

printf("过滤后的小写字母为:%s\n", c_ch);

for(j=0; j<MAX; j++)
{
if(n_num[j] != 0)
{
printf("%c,%d\n", ASCIIMIN + j, n_num[j]);
}
}

system("pause");
return 0;
}


------解决思路----------------------
在strcopy函数中未检测str1和str2的有效性,如果这两个参数都是空的,你就没有处理,最好加上assert(str1 != NULL && str2 != NULL);

------解决思路----------------------
如果str2的长度大于str1你的那个复制函数还能正确运行吗