c风格字符串和string使用的一些注意点

1.对于c风格字符串,通常有如下几种赋值方法(字符串(双引号括起来的)都是以'\0'结尾的!!

char p[]="abcde";这里“abcde”是个常量字符串,存储在常量区。字符串的结尾都是带‘\0’的,只是没有显示而已,p是个数组。这里的意思是把此常量字符串值复制一份存储在数组p中,p的最后一个位置存储的是‘\0',数组长度为6。

char p[]={'a','b','c','d','e'};这里就是创建一个字符数组,分别存储字符’a','b','c','d','e',没有'\0'的存在,数组长度是5.这里需要注意的是:strlen函数用来求p的长度结果是错误的,strlen函数的参数类型为char*,p可以看为char*,所以不会报错,但是strlen内部执行时是从char*处开始,直到查询到‘\0'结束,记录字符串长度,而数组中并没有存储'\0',所以其会继续向后查询,这样就产生了错误!!!!!

char* p="abcde";这里不同于以上两种,“abcde”是一个常量字符串,p是一个指向此常量的指针,所以这里通过p操作的就是常量区的字符串。由于是常量,所以只能访问,不能对其进行赋值操作,p[3]=‘d’是错误的!二维情况定义如下 char* p[]={"abc","def","fefew"};//p[]是一个指针数组,分别指向其中的一个字符串,p是指向指针数组首的指针,等同于p[0]

2.对于c++中的string类

string a="abcde";这里a是一个对象,常量区的字符串用来给此对象赋值。赋值结果是'a','b','c','d','e'被字符串收纳了,但是'\0'被去除了,也就是说,a对象只有5个字符,并没有'\0'。

同时string类重载了<<,[]操作符。可以使用<<输出string对象(输出的是其中的字符串),同时字符串类中存储的字符串是可以修改及访问的,[]操作符可以访问其中的字符,也可以给某个字符重新赋值!

3.strlen和sizeof的使用

//	sizeof()函数用来确定参数所占的内存大小。通常参数有四种类型。
	int a;
	string s="abc";
	cout<<sizeof(char)<<endl;//1.变量类型。1
	cout<<sizeof(a)<<endl;//变量名。a的类型为int,所有,4
	cout<<sizeof(s)<<endl;//对象名.注意这里返回的不是“abc”占内存大小!s的类型为string,返回的应该是string的大小。不同的版本string大小不同。这里是32
	cout<<sizeof("abc")<<endl;//常量名。4

	char* q="abcd";
	char p[]="abcd";
	cout<<sizeof(p)<<endl;//由于p在内存中并不存在,这里sizeof(p)的大小是数组p的大小,5
	cout<<sizeof(q)<<endl;//q是变量,是个指针变量,所以大小不变,4
	cout<<sizeof(*q)<<endl;//*q的内容是a,类型是char,所有大小为,1



//	strlen函数返回字符串的长度,不包含'\0'
	char* p="abcdef";
	 cout<<sizeof(p)<<endl;//4
	 cout<<sizeof(*p)<<endl;//1
	 cout<<strlen(p)<<endl;//6

	 char q[]="abcdef";
	 cout<<sizeof(q)<<endl;//7
	 cout<<sizeof(*q)<<endl;//1
	 cout<<strlen(q)<<endl;//6


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值