行业知识
C语言之字符数组
目录
前言
字符数组
字符串的存储
字符数组初始化
字符数组的输入输出
字符串处理函数
·字符串输出函数 puts
·字符串输入函数gets(不安全,尽量别用)
·gets()函数的替代方法
·fgets()函数
·getchar()函数+循环
·用scanf + 循环
·字符串连接函数strcat
·字符串拷贝函数strcpy
·字符串比较函数strcmp
·字符串长度函数strlen
·字符串处理函数(strlwr函数与strupr函数)
总结
前言
本篇是针对网上学习字符数组的知识点的总结。
感谢评论区的小伙伴提出的问题,gets()函数输入字符串那里确实有问题。现在gets()函数已经被弃用,因为它是不安全的。我会在文章中写明原因和替换gets()函数的方法。
字符数组
用来存放字符数据的数组是字符数组。
C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符
一维字符数组:存放一个字符串(每个数组元素存放一个字符)
二维字符数组:存放多个一维数组(字符串);二维数组的行数是字符串的个数
定义格式: char 数组名[常量表达式];
例如:char c[6]; //c数组具有6个元素,可以存放长度小于或等于5的字符串。
char 数组名[常量表达式][常量表达式]; //声明的时候,方括号中一定是常量或常量表达式,使用的时候可以是变量。其中常量表达式:整数、字符、符号常量 。 也可以用整型数组存放字符型数据,但是浪费存储空间。
字符串的存储
例如:char c[10]="c program"; 该数组在计算机中存储的形式为
| c[0] | c[1] | c[2] | c[3] | c[4] | c[5] | c[6] | c[7] | c[8] | c[9] |
| c | 空格 | p | r | o | g | r | a | m | 字符数组初始化 |
强调:字符串实际占有单元的数量等于字符串长度+1。
定义时注意考虑元素总个数应比实际长度多1。
(一)用单个字符对字符数组初始化
例如:char c[10]={'c',' ', 'p','r','o','g','r','a','m','\0'}; //把10个字符依次赋给c[0]~c[9]这10个元素
内存中存储情况:
| c[1] | c[2] | c[3] | c[4] | c[5] | c[6] | c[7] | c[8] | c[9] | c |
| p | r | o | g | r | a | m |
说明:
- 如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度
- 将字符串存储到字符数组中,字符串和第一个'
字符数组的输入输出
'构成有效字符串。对字符串的操作,就说对字符数组的操作 %c - 如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')
(二)用字符串常量对字符数组初始化
例如:(1)char str[6]={"CHINA"};
(2)char str[6]="CHINA"; //省略{}
(3)char str[ ]="CHINA"; // 省略长度值
(4)char c[12]={"HOW ARE YOU"};
与char c[ ]={'H','O','W',' ','A','R','E',' ','Y','O','U','\0'}; 等价
(5)char *p=c; //用一个指针指向该数组,*(p+i) a[i]
说明:
#includeint main(){ char c[5]; int i; for(i=0;i - 普通数组中的元素是确定的,一般用下标控制循环;而字符串使用结束符'\0'来控制循环
1、单个字符输入输出(用格式符或字符输入函数)
上一篇:服务器被攻击怎么防御设备?