字符数组的使用2

#include<cstdio>
#include<cstring> 
using namespace std;
int main(){
	/*
	字符数组常用函数 
	*/
	//strlen(s) 返回字符数组内实际字符串的长度即'\0'前的字符数 
	char ch1[10]="123456789";
	printf("%d\n",strlen(ch1));
	char ch2[9]={'a','b','c','d','\0','e','\0','\0'}; 
	printf("%d\n",strlen(ch2));
	//strlwr(s)将字符串内所有字符转为小写 
	//strupr(s) 将字符串内所有字符转为大写
	char ch3[8]="ABCDEFG";
	char ch4[8]="hijklmn";
	printf("%s\n",strlwr(ch3));
	printf("%s\n",strupr(ch4));
	//strcmp(s1,s2) 比较两个字符串大小(字典序);
	//s1>s2,返回一个正数;s1<s2,返回一个负数;s1==s2,返回0 
	//你能猜猜这个函数是怎么比较的吗?
	char ch5[10]="123";
	char ch6[10]="213"; 
	printf("%d\n",strcmp(ch3,ch4));
	printf("%d\n",strcmp(ch5,ch6)); 
	//连接两个字符串
	//strcat(s1,s2)将字符串s2连接到字符串s1后面 ,结果保存在s1。小心数组越界 
	//strncat(s1,s2,n) 将字符串s2的前n个字符连接到字符串s1后面 ,结果保存在s1 
	
	char ch8[30]="good, but i don't think so!";printf("%s\n",strcat(ch5,ch6));
	char ch7[10]="C++ is";
	//如果互换两个数组的声明顺序呢? 
	printf("ch7:%s\n",ch7);
	strcat(ch7," ");
	printf("%s\n",strcat(ch7,ch8));//此时ch7数组已越界;
	printf ("ch7:%s\n",ch7);
	printf("ch8:%s\n",ch8);//数组ch8的一些元素被系统覆盖了 
	printf("%p %p\n",ch7,ch8);//打印两个数组的首地址 
	printf("打印目前所有数组:-----------------\n");

	/*
	小结:strcat()存在越界的问题,
	因此我们在使用该函数之前需要确保目标字符数组的空间足夠大!
	在有些程序中,由于变量较少,或系统内存分配的原因,
	运行似乎沒错,但是还是有很严重的隐患的!
	*/
	//复制字符串
	//strcpy(s1,s2)将s2的内容复制到s1中,结果保存到s1 
	//strncpy(s1,s2,n) 将字符串s2的前n个字符复制到s1,结果保存到s1 
	//与strcat类似,小心数组越界问题哦! 
	char ch9[10]="hahaha";
	char ch10[5]="666";
	strcpy(ch9,ch10); 
	printf("%s\n",ch9); 
	//问题来了,如果s2的字符串长度小于s1,复制完后,s1里是什么样子呢? 
	for(int i=0;i<10;i++){
		if(ch9[i]!='\0')printf("%c\n",ch9[i]);
		else printf("\\0\n"); 
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值