6.4 字符数组-2

五.字符数组的输入输出

char c[] = "China";
printf("%s\n",c);   //%s格式用来输出一个字符数组(字符串)
//1.printf输出的字符不包括 \0  (字符串结束标记)
//2.%s对应的是字符数组名
//3.即便数组的长度大于字符串实际长度,也只输出到\0结束。
//4.如果一个字符数组里包含多个\0,printf也只是遇到第一个\0时就停止输出.

在这里插入图片描述
在这里插入图片描述

从键盘输入一个字符串,用scanf来完成

char c[100];
scanf("%s",c);  //从键盘输入一个字符串,c:字符数组名
printf("%s\n",c);

从键盘输入多个字符串,用scanf来完成

char str1[10],str2[10],str3[10];
scanf("%s%s%s",str1,str2,str3);
char c[100];
scanf("%s",c);//输入一个字符串的时候不能加入空格,否则空格后的内容会被丢弃。
                //c这个字符数字名本身就代表该数组的起始地址.
                //c 和 &c  被等同看待,都被认为是数组的起始地址.
int a;
scanf("%d",&a);  //&地址符号,地址就是个数字,在电脑里地址一般就用0xXXXXXXXXXXXX.

char str1[100];

printf("%d\n",str1);   //用10进制数形式打印数组的起始地址
printf("%d\n",&str1);   //用10进制数形式打印数组的起始地址

在c语言中,一维字符数 就可以看成字符串变量

六.字符串处理函数

1.puts(字符串数组)

puts(字符串数组):将一个字符串(能换行)输出到屏幕,注意只能输出一个字符串。

char str[100] = "Are you ok?";
puts(str);
printf("%s\n",str);

2.gets(字符数组名)

gets(字符数组名):从键盘输入一个字符串到字符数组中,只能输入一个字符串;

char str[100] = "Are you ok?";
gets(str);
printf("%s\n",str);

3.stract(字符数组1,字符数组2)

stract(字符数组1,字符数组2) 右边连接到左边的后面
作用:连接两个字符数组中的字符串,把字符数组2中的字符连接到字符数组1后边,结果放在字符数组1中。

char str1[100] = "one";  //这里不少于7个字符的长度
char str2[100] = "two";
stract(str1,str2);

说明:1.字符数组1必须足够大,能够容纳连接后的新字符串。
2.连接之前两个字符串数组后面都有一个 \0 ,连接时将字符串数组1后面的 \0 取消掉,连接后只在新串后保留一个\0。

4.strcpy(字符数组1,字符串2);

将字符串2拷贝到字符数组1中。字符数组1的内容将被覆盖。

char str1[20] = "one1234";  //这里不少于7个字符的长度
char str2[15] = "two";
strcpy(str1,str2);     //str1的大小一定不要小于str2.

说明:
1.字符数组1必须足够大,也就是,字符数组1的长度不能小于字符串2的长度。
2.字符数组1必须是个数组名,字符串2可以是个字符数组名,也可以是个字符串常量
3.拷贝时连同字符串后面的\0一起拷贝到字符数组中。
4.不能用赋值语句直接将一个字符串常量赋给一个字符数组。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.strcmp(字符串1,字符串2);

strcmp(字符串1,字符串2); 常用于比较两个字符串相不相等
比较字符串1和字符串2.
(1)如果字符串1等于字符串2,该函数返回0;
(2)如果字符串1<字符串2,该函数返回 >0 的数 1;
(3)如果字符串1 > 字符串2,该函数返回< 0 的数 -1;
在这里插入图片描述

6.strlen(字符数组);

strlen(字符数组):测试字符串实际长度的函数(遇到\0自动停止),长度不包括\0
在这里插入图片描述
关键字 sizeof 是一个单目运算符,而不是一个函数。与函数 strlen 不同,它的参数可以是数组、指针、类型、对象、函数等,如下面的示例代码所示:

char sArr[] = "ILOVEC";
/*用sizeof求长度*/
printf("sArr的长度=%d\n", sizeof(sArr));

相对于函数 strlen,这里的示例代码运行结果为 7(因为它包括结束字符 null)。同时,对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。

使用sizeof获得数组长度:
中心思想:使用数组的sizeof大小除以单个元素的数据类型的sizeof得到数组的大小

unsigned int unStartString[] = {0x89, 0x50, 0x4e, 0x47, 0x0d};

int len = sizeof(unStartString)/sizeof(unsigned int);

#define dim(arr) (sizeof(arr)/sizeof(arr[0]))

直接传数组名,这是编译阶段可以这么搞,运行时动态获取数组长度是不行的,一般都是加一个数组长度的参数

七.整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值