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