当前位置: 首页 > news >正文

从错误中得知--关于字符串我以前没注意的东西

先来看一段代码,看你能发现其中的错误么:

#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自己容易错的地方。
  • C语言学习之内存管理函数malloc()和free()
  • 笔记本电池常识和THINKPAD电源管理器介绍--能设置充电起点和终点
  • C++开发人员必备:86本C++教程电子书下载
  • 各种排序算法的复习
  • 简单算法--闰平年问题
  • POJ2080--Calendar以及一个类似的编程面试题
  • 简单算法--求最大公约数和最小公倍数
  • Linux--软件安装+常用命令--1:Ubuntu Server 12.04 安装手记 + Ubuntu 12.04 菜鸟完全使用教程PDF
  • ForFisrtWork:为了下午六点半的京东方笔试
  • ForFisrtWork--No.5:刚考完2013软件开发B卷,回忆题目并总结之
  • 简单算法--将一个整型数字逆转
  • 简单算法--交换两个数不使用中间变量
  • 写给自己的话
  • STL初识
  • 30秒的PHP代码片段(1)数组 - Array
  • Android 架构优化~MVP 架构改造
  • CSS 专业技巧
  • gf框架之分页模块(五) - 自定义分页
  • JavaWeb(学习笔记二)
  • js对象的深浅拷贝
  • Js基础——数据类型之Null和Undefined
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • mysql 数据库四种事务隔离级别
  • rabbitmq延迟消息示例
  • Rancher如何对接Ceph-RBD块存储
  • RxJS: 简单入门
  • 一天一个设计模式之JS实现——适配器模式
  • 一些css基础学习笔记
  • 赢得Docker挑战最佳实践
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # include “ “ 和 # include < >两者的区别
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • ###项目技术发展史
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (生成器)yield与(迭代器)generator
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)为C# Windows服务添加安装程序
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .Net中的集合
  • .py文件应该怎样打开?
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [Android] Android ActivityManager
  • [Android学习笔记]ScrollView的使用
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [CodeForces-759D]Bacterial Melee
  • [dfs] 图案计数
  • [Electron]ipcMain.on和ipcMain.handle的区别
  • [Fri 26 Jun 2015 ~ Thu 2 Jul 2015] Deep Learning in arxiv