字符串反转引发的char str[]="abc"和char *str="abc"思考
来源:互联网 发布:犀牛o2o源码 编辑:程序博客网 时间:2024/06/08 08:43
尝试写一个字符串反转的函数,不开劈内存空间,通过指针首尾交换完成反转,代码如下:
#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” 的区别
函数返回值—返回局部变量内容
0 0
- 字符串反转引发的char str[]="abc"和char *str="abc"思考
- 面试题--字符串指针与字符串数组的区别char* st="abc;与char* str[]="abc";的异同
- 在函数体内声明[1] char *str=”abc”;和[2] char str[]={‘a’,’b’,’c’}有什么区别
- String str="abc"和String str=new String("abc")的区别
- 关于String str =new String("abc")和 String str = "abc"的比较
- C++string str="abc";sizeof(str)
- char *str和char str[]的区别
- char str[] 和 char *str 的区别
- char str[] 和 char *str 的区别
- char str[] 和 char *str 的区别
- char str[] 和 char *str 的区别
- char str[] 和 char *str 的区别
- char str[] 和 char *str 的区别
- char str[] 和 char *str 的区别
- char str[]和char* str的区别
- char str[] 和 char *str 的区别
- char str[] 和 char *str的区别
- char *str 和 char str[]的区别
- JS闭包及内存泄露
- 易语言学习第十一课
- CString用法
- 有符号十六进制转十进制 c++
- [BZOJ1467]Pku3243 clever Y(扩展BSGS)
- 字符串反转引发的char str[]="abc"和char *str="abc"思考
- $(document).ready()
- OpenCv学习笔记---OpenCv中支持向量机模块SVM------源代码分析
- 隐形变量赋值,隐藏参数,隐藏传参
- 2016sdau课程练习专题二 1020
- 345. Reverse Vowels of a String 【E】
- mysql一些实用的语句
- DayDayUP_Linux运维学习_oracle11g安装教程
- ios UITableView实现单击提示,滑动删除,多选行等操作