#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;
}
字符数组的使用2
最新推荐文章于 2024-07-18 11:52:46 发布