从错误中得知--关于字符串我以前没注意的东西
来源:互联网 发布:ccs软件功能 编辑:程序博客网 时间:2024/05/21 09:54
先来看一段代码,看你能发现其中的错误么:
#include<iostream>using namespace std;int main(void){char* pstr=" I absolutely Love China ";//奥秘的关键语句之一int beg=0,end=0,i=0;while(pstr[i]==' ' || pstr[i]==13 || pstr[i]=='\t')i++;beg=i;while(pstr[i]!='\0') i++;while(pstr[i]==' ' && pstr[i]==13 && pstr[i]=='\t')i--;end=i;cout<<beg<<endl<<end<<endl;for(i=0;i<=end-1-beg;i++){pstr[i]=pstr[i+beg];//奥妙在此处体现,运行到这时会出现这样的错误 //在此处设置调试断点的结果如下:
//
}pstr[i]='\0';cout<<pstr<<endl;return 1;}
运行结果:编译的时候不会有错误提示。
分析:
用语句char* pstr=" I absolutely Love China ";得到的pstr字符串指针指向的内存单元是不能写的,只能读,可以这样理解,
" I absolutely Love China "是常量。改为 char pstr[]=" I absolutely Love China ";在pstr[i]=pstr[i+beg];处就能正常运行了。
另有如下体会:
虽然以前知道数组名是常量,不能被第二次赋值,但是用的时候还是会不注意,我犯过一次这样的错误。
#include <iostream>using namespace std;int* pBubbleSort(int* a,int num){int i=0,j=0;for(;i<num-1;i++)for(j=i+1;j<num;j++)if(a[i]<a[j]){//不用临时变量交换两个数a[i]=a[i]^a[j];a[j]=a[j]^a[i];a[i]=a[j]^a[i];}return a;}int main(){int a[10]={1,5,8,2,3,7,9,10,4,6},i=0;int* p=NULL;p=pBubbleSort(a,10);//注意不能用a=pBubbleSort(a,10);因为a是常量不能被第二次赋值。for(;i<10;i++){cout<<"p["<<i<<"]="<<a[i]<<" ";}cout<<endl;return 1;}
- 从错误中得知--关于字符串我以前没注意的东西
- 从错误中得知--有关malloc自己容易错的地方。
- 以前的硬盘坏了。。好多东西都没了。。
- 函数的声明与定义(以前没注意过!!)
- 以前的东西
- 好久没写东西了,手痒了,写写我使用mysql中遇到的几个问题吧
- [Boolan] STL 花点功夫了解一下以前没去了解的东西^_^
- js中关于字符串匹配的一些东西
- Android-关于WebView需要注意的东西
- 以前我没学过编程 请问编程从那里学起
- #include <afxinet.h> fatal error C1903无法从以前的错误中恢复;正在停止编译
- 以前的帖子没了??
- 没完成的东西
- 上线中需要注意的东西
- 在GridView中要注意的东西!
- 移动工作中需要注意的东西
- css中浮动需要注意的东西
- 关于getHibernateTemplate() 的save 后数据库没东西
- 堆和栈的区别
- spring注解
- java中堆和栈的理解
- c/c++正则表达式
- OpenGL笔记:四. 视图变换
- 从错误中得知--关于字符串我以前没注意的东西
- hdu 2544(最短路)
- MyBatis学习(四)- 动态SQL
- 正则表达式之优先级
- vim的智能补全
- ubuntu 安装星际译王英汉词典
- isLowerCase、isUpperCase
- 简易计算器
- 算法:并查集学习笔记