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]))
直接传数组名,这是编译阶段可以这么搞,运行时动态获取数组长度是不行的,一般都是加一个数组长度的参数