关于小写字符转大写字符的有关问题,请问指点

关于小写字符转大写字符的问题,请教指点!

void uppers(const char *str,char *dest){
assert((str!=NULL)&&(dest!=NULL));
while(*str!='\0'){
if( (*str>='a') && (*str<='z') )
{
*dest=*str-32;
}
str++;
dest++;
}
*dest='\0';
}

void main(){
char *a="abcdefghijk";
//char *a="abcdef[]{}=-+ghijk";//为啥输入有a~z之外的其他字符时就有乱码??
char b[30];//字符串数组b必须必a要大。
uppers(a,b);
cout<<b<<endl;
}

为啥输入有a~z之外的其他字符时就有乱码???
------解决思路----------------------
void uppers(const char *str,char *dest){
assert((str!=NULL)&&(dest!=NULL));
while(*str!='\0'){
*dest=*str;
if( (*str>='a') && (*str<='z') )
{
*dest=*str-32;
}
str++;
dest++;
}
*dest='\0';
}
------解决思路----------------------
从语言标准库里面有这个函数,看我代码关于小写字符转大写字符的有关问题,请问指点
/*************************************************************************
    > File Name: toupper.c
    > Author: Jukay
    > Mail: hellojukay@gmail.com 
    > Created Time: 2014年10月23日 星期四 10时33分57秒
 ************************************************************************/

#include<stdio.h>
#include<ctype.h>

int main()
{
char s[] = "hello world!";
printf("before toupper is: %s\n",s);
for(int i=0; i< sizeof(s); i++)
s[i] = toupper(s[i]);
printf("after toupper is: %s\n",s);

return 0;
}

详情可登陆www.gfsoso.com
------解决思路----------------------
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

------解决思路----------------------
自己实现库函数就行啦

#include <stdio.h>

int
my_isupper(char c)
{
    return (c >= 'A' && c <= 'Z');
}

int
my_islower(char c)
{
    return (c >= 'a' && c <= 'z');
}

int
my_toupper(char c)
{
    if (my_islower(c))
        return 'A' + (c - 'a');
    else
        return c;
}

int
my_tolower(char c)
{
    if (my_isupper(c))
        return 'a' + (c - 'A');
    else
        return c;
}

char *strupper(char *s)
{
    char *p;

    for (p = s; *p; ++p)
        *p = my_toupper(*p);
    return s;
}

char *strlower(char *s)
{
    char *p;

    for (p = s; *p; ++p)
        *p = my_tolower(*p);
    return s;
}

int
main(int argc, char *argv[])
{
    char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcd-1234";

    printf("%s\n", strupper(s));
    printf("%s\n", strlower(s));

    return 0;
}