比划着写的库函数,如何运行报错,请大家诊断下

比划着写的库函数,怎么运行报错,请大家诊断下?
#include <stdio.h>

char*   my_strlwr(char*   str)    
{
if(str   ==   NULL)
return   0;
char*   temp   =   str;

while(*temp   !=   '\0 ')
{
                if((*temp> = 'A ')   &&   (*temp <= 'Z '))
*temp   =*temp   +   0x20;         //跟踪的时候在这里报错
temp++;
}
return   str;
}

int   main()
{
char   *tolower= "AAAAAbbbbbSSSSZZZZZZQQQ1123334 ";   //在这里如果把*tolower修改为tolower[]就可以了

  my_strlwr(tolower);  
printf( "after   strlwr   the   string   is   %s\n ",tolower);

return   0;
}

大家看我的注释,在主函数main里,为什么使用字符串指针变量*tolower就会报错,但使用字符数组形式就可以了?我使用的是vc++6.0

------解决方案--------------------
你的那串数据是const char *类型的,不可修改。
------解决方案--------------------
char *tolower= "AAAAAbbbbbSSSSZZZZZZQQQ1123334 ";
这样的*tolower是指向程序的全局静态数据区,该数据是只读的,所以执行 *temp =*temp + 0x20; 写操作会出错。

而 char tolower[]= "AAAAAbbbbbSSSSZZZZZZQQQ1123334 ";
这个tolower[]是一个数组,数据存放在堆栈中,可以读写,所以没错。

------解决方案--------------------
char *tolower= "AAAAAbbbbbSSSSZZZZZZQQQ1123334 "; tolower指向了静态栈地址,你修改了他就报错了...当然某些编译器也会不报错
------解决方案--------------------
tolower[]是一个数组,可以读写,所以没错