C语言中修改字符串的一个字符的值
2014-02-19 17:03
295 查看
失败的方案(1):
char *a = "abcdefg"; *(a+3) = 'n'; //想修改第四个的值为n
printf("The change qian de a is:%s\n",a);
输出时会显示段错误:Segmentation fault (core dumped)//字符串存放的内存区域不同:前者存放在常量区,不可修改
成功方案(2):
char *b,*a; b=new char[11]; strncpy(b,"string",8); a=b; *(++b)='h'; //*(a+3)='n'; printf("The change hou de b is %s and a is %s\n",b,a);//字符串存放的内存区域为堆栈区,可以修改
成功方案(3):
char a[]="abcdef"; *(a+3)='n';
printf("The change qian de a is:%s\n",a);//字符串存放的内存区域为堆栈区,可以修改
原因如下:
注意char *a="abcdef"与char a[]="abcdef"的区别:1、字符串存放的内存区域不同:前者存放在常量区,不可修改,后则存放在栈中,可以修改;2、变量a存放的内容不同:前者存放的是一个地址,而后者存放的是字符串"abcdef",因此使用sizeof它们的结果是不同的,分别是4和7;此外关于new分配的对象数组的情形,以为是内存区中的修改。所以也是可以实现修改字符串的。
相关文章推荐
- C语言中extern的用法--转
- The Definitive C++ Book Guide and List--reference
- How to Install Eclipse C/C++ Development Tool--转
- 用C语言实现Ping程序功能---转
- C++作用域
- C++ primer中,"单词转换"map对象源码问题
- c++多态性——vptr和vtable
- Accelerated C++ 习题解答 第0章
- C语言位运算详解
- const的使用规则(高质量c++)
- 和链表有关的算法题(C++)
- C++ primer plus 学习笔记
- C++参数传递指导原则(何时使用引用参数)
- C++宏定义详解
- Qt C++中的关键字explicit
- VC++线程同步
- 【二分查找】-HDU-1969-Pie
- C++11新东西学习(持续更新)
- C++11新东西学习(持续更新)
- C++:关于type alias