读书人

比划着写的库函数如何运行报错请大

发布时间: 2012-03-03 15:33:03 作者: rapoo

比划着写的库函数,怎么运行报错,请大家诊断下?
#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[]是一个数组,可以读写,所以没错

读书人网 >C语言

热点推荐