字符串反转引发的char str[]="abc"和char *str="abc"思考
2016-04-23 17:36
363 查看
尝试写一个字符串反转的函数,不开劈内存空间,通过指针首尾交换完成反转,代码如下:
编译没问题,运行时提示
gdb调试发现在这一行出现问题
在这个声明中,”can i help you!”被存储在静态数据区 ,而且是全局的,p仅仅就是个指针(存储在栈内存当中),指向这个区域,任何尝试对此区域赋值的操作都是非法的。
推荐用法:
加const显示声明
推荐阅读:
char *p=”abc” 与 char p[]=”abc” 的区别
函数返回值—返回局部变量内容
#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语言零基础入门—Hello, World!
- 黑马程序员-学习笔记C语言03
- C语言基础 结构体 枚举
- C语言基础 内存区分与存储
- C语言基础 指针函数与函数指针
- C语言基础 指针
- C语言基础 字符串
- C语言基础 进制
- C语言基础 循环结构 while for
- ||C||<基础>C语言基础知识框架结构//个人整理使用|仅供参考|
- C程序设计语言(第二版.新版)练习1-10
- C语言基础---基本运算的注意点
- C语言基础——函数
- OC语言----foundation其他常用的类型
- 11-19代码
- 11-20
- 11-20代码
- 11-21日代码 文件的存取,链表的使用
- 11-22学生信息管理系统
- 技术小白的C语言之路