您的位置:首页 > 编程语言 > C语言/C++

字符串反转引发的char str[]="abc"和char *str="abc"思考

2016-04-23 17:36 363 查看
尝试写一个字符串反转的函数,不开劈内存空间,通过指针首尾交换完成反转,代码如下:

#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显示声明

推荐阅读:

char *p=”abc” 与 char p[]=”abc” 的区别

函数返回值—返回局部变量内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言基础