尝试写一个字符串反转的函数,不开劈内存空间,通过指针首尾交换完成反转,代码如下:
#include <stdio.h>
#include <string.h>
char *reverseString(char *str){
char *start=str;
char *end=start+strlen(str)-1;
char temp;
while(start < end)
{
temp=*start;
*start=*end;
*end=temp;
start++;
end--;
}
return str;
}
void PRINT(char *str){
int i=0;
while(*str != '\0')
{
printf("%c",*str++);
}
printf("\n");
}
int main(){
char *Pstr="can i help you!";
//char str[]="can i help you!";
//char *Pstr=str;
char *strTemp;
PRINT(Pstr);
strTemp=reverseString(Pstr);
PRINT(strTemp);
return 0;
}
编译没问题,运行时提示
can i help you!
Segmentation fault (core dumped)
gdb调试发现在这一行出现问题
*start=*end;
原因分析:
char *Pstr="can i help you!";
在这个声明中,”can i help you!”被存储在静态数据区 ,而且是全局的,p仅仅就是个指针(存储在栈内存当中),指向这个区域,任何尝试对此区域赋值的操作都是非法的。
推荐用法:
const char *Pstr="can i help you!";
加const显示声明