c++字符串数组与字符串指针 c++ primer plus chapter 7 复习题8 的一点小问题
来源:互联网 发布:电脑配音软件 编辑:程序博客网 时间:2024/06/14 04:17
最近再看c++ primer plus ,做第7章复习题8时,发现自己写的与答案不一样,就顺便调试试了下,发现答案也是有问题的:
原题是:编写一个函数,把其中某一个字符都用另一个字符替换
贴出来代码,写起来还是很容易的
#include<iostream>
#include<string>
int replace(char str[],char c1,char c2);
using namespace std;
int main()
{
//char *wail="luualut"; // @1
char wail[]="luualut"; // @2
cout<<wail<<endl;
int n=replace(wail,'u','c');
cout<<wail;
cin.get();
}
int replace(char *str,char c1,char c2)
{
int n=strlen(str);
int count=0;
for(int i=0;i<n;i++)
//while(*str)
{
if(*str==c1)
{
*str =c2; //@3
count++;
}
str++;
}
return count;
}
函数声明的时候证实不论用字符串指针,或数组是一样的,当然这与书上的是一样的,但当主函数中用@1时 编译成功,运行就会出现写入错误,就会卡在@3处,找了很多说是指针指向空的等等,但都没有明白,也改不过来,后来看到http://blog.sina.com.cn/s/blog_4c70701801015n3t.html这篇博客才稍微明白点,声明指针字符串常量的时候,左边的变量是在栈中的,右边的字符串常量是在堆中,是不可更改的,所以当我们想更改里面的字符时就会出现写入错误,换成数组的定义方式,即@2的方式,就可以了,因为数组定义方式,左右都是在栈中,是可以修改的,更深的原因还是没理解太清,还有待继续学习。。。。。。
上面有两种循环方式,while明显简单更多,这应该就是思维差异,希望多锻炼,能有所提升。
- c++字符串数组与字符串指针 c++ primer plus chapter 7 复习题8 的一点小问题
- C语言指针字符串和数组字符串的一点区别
- 学习《C Primer Plus》---把字符串看作指针
- c primer plus 指针与多维数组探究
- C Primer Plus-C语言字符串操作
- C字符串数组与字符串指针
- C++:C++primer plus 指针问题理解
- C语言中,指针字符串与数组字符串的区别
- C primer plus -- Chapter 2
- 字符串与字符数组的区别(摘自c++primer)
- 字符串笔记(C Primer Plus)
- 『C++ Primer学习笔记』Chapter 3——string对象、vector对象以及数组的配套类型,C风格字符串问题和处理区别
- C 字符串指针与字符数组
- C语言字符串、数组与指针结合
- C语言字符串指针---与数组0811
- C字符串的小问题
- C字符串的小问题
- C primer plus:指向函数的指针
- OpenGL的视图变换
- 字符串排列和组合的问题
- C#操作Word文档
- 【shell排序】
- CodeSign error: code signing is required for product type Application in SDK iOS
- c++字符串数组与字符串指针 c++ primer plus chapter 7 复习题8 的一点小问题
- Climbing Stairs
- 存储持续性、作用域和链接性
- POJ 1094 Sorting It All Out (拓扑排序)
- actionbar设置
- TypedValue.applyDimension()的作用
- Spark1.0.x入门指南
- Fragment简单示例
- 基于BaseAdapter的Listview小Demo