一个容易的将小写字符串转换成大写的函数

一个简单的将小写字符串转换成大写的函数
我用的是VC++6.0,恳请大家帮忙看看到底哪里出错了。
#include <stdio.h>

void uppers(char *Dest,char *Sour)
{
while(*Sour != '\0')
{
*Dest = *Sour - 32;
Dest++;
Sour++;
}
*Sour = '\0';
}

int main()
{
char *str1 = "abcdefg";
char *str2;
    
uppers(str2,str1);

printf("%s\n",str2);
return 0;
}

------解决方案--------------------
#include <stdio.h>
#include<stdlib.h>
void uppers(char *Dest,char *Sour)
{
while(*Sour != '\0')
{
*Dest = *Sour - 32;
Dest++;
Sour++;
}
*Dest='\0';
}

int main()
{
char *str1 = "abcdefg";
char *str2=(char*)malloc(sizeof *str2);
    
uppers(str2,str1);

printf("%s\n",str2);
return 0;
}
这样
------解决方案--------------------
一个容易的将小写字符串转换成大写的函数
#include <stdio.h> 
void uppers(char *Dest,char *Sour)
{    
while(*Sour != '\0')    
{        
*Dest = *Sour - 32;        
Dest++;        
Sour++;    
}    
*Dest = '\0';

int main()
{    
char str1[8] = "abcdefg";
    char arr[8];
char *str2=arr;         
uppers(str2,str1);     
printf("%s\n",str2);    
return 0;
}
你怎么比我还菜啊。

------解决方案--------------------
void uppers(char *Dest,char *Sour)
{
while(*Sour != '\0')
{
*Dest = *Sour - 32;
Dest++;
Sour++;
}
*Dest = '\0';
}

int main()
{
char *str1 = "abcdefg";
char *str2 = (char*)malloc(100);

uppers(str2,str1);

printf("%s\n",str2);
return 0;
}


修改这两处
------解决方案--------------------
注意读写操作要合法,你的大小写转换逻辑也有问题,尽量用库函数。

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

void uppers(char *d,char const* s)
{
  while(*s)
  {   
    *d = toupper(*s);   
    ++s, ++d;
  }
  *d = 0;
}

int main()
{
  char *str1 = "abcdefg7868766jn6566";
  char *str2 = (char*)malloc(strlen(str1) + 1);
  if(str2) 
  {
    uppers(str2,str1);
    printf("%s\n",str2);
    free(str2);
  }