一.字符串储存

字符串是由数字、字母、标点符号组成的一串字符,在C语言中,字符串没有专属的数据类型,而是基于字符类型进行表示的,他的存储分为内存存储与数组存储两种形式。

1.内存存储

字符串在内存中是连续存储的,以字符\0结束,\0占用一个储存空间,但\0不会被计入字符串的实际长度


由上图可知,在C语言中,字符串的地址实际上是该字符串的首地址。所以可以直接将字符串赋给基类型为char的指针变量。

2.数组储存

字符串可以用数组储存,分两种,第一种是使用单个字符依次为数组进行赋值,之后再赋一个结束符(\0)一表示字符串结束

%s打印字符串

第二种相对简单,就是直接使用字符串为数组赋值

因为字符串结束有个占位符\0,所以字符串长度必须小于数组中元素个数,否则会出现溢出错误

二.使用字符串

在C语言中,字符串常见使用包含指针操作字符换、输入/输出字符串、字符串数组等。

1.指针操作字符串

将字符串赋给指针变量,然后通过指针变量访问内存中的字符串。

2.输入和输出字符

C语言标准输入库stdio.h提供多种输入和输出相关的函数。其中,输入/输出字符串会用到4个系统函数。

a.输入字符串

输入字符串会用到函数scanf()与函数gets()。
(1)scanf()可以获取用户输入的单个或多个字符串,并且可以将字符串赋给数组变量及指向数组变量的指针变量。

scanf_s("字符串占位符1 字符串占位符2 …… 字符串占位符n",数组变量名1,限制元素个数,数组变量名2,限制元素个数,……,数组变量名n,限制元素个数)

其中,数组名可以替换为指向数组变量的指针变量名
(2)函数gets()可以读取用户输入的单个字符串,并且可以将字符串赋给数组变量及指向数组变量的指针变量

gets(s);

其中s指代数组变量或指针变量名,基类型必须是char。
gets()函数以换行符结束,并且换行符会被丢弃,自动添加结束符’\0’

b.输出字符串

输出字符串要用到函数printf()和puts()。
(1)在函数printf()输出字符串时,会用到占位符(%s)、存放字符串的数组和指向字符串的指针变量,与scanf()配合使用。
(2)puts()只能输出一个字符串,不能输出数值或进行格式变换,并且在输出字符串后会自动换行。与gets()配合使用

3.字符串数组

字符串数组是指对多个字符串以二维数组或指针数组的形式进行管理/字符串数组的二维数组形式是指直接将字符串赋给二维数组。

二维数组常量表达式2要大于每个字符串的长度,因为有个’\0’占位符

三.字符串系统函数

为了方便对字符串的管理和使用,C语言提供了多个系统函数来对字符串进行操作。这些系统函数全部来源于头文件string.h

1.复制字符串函数

复制字符串函数 strcpy() 可以对一个字符串进行复制,并返回复制的字符串。

strcpy(a,b);

将b复制到a。

2.字符串比较函数

字符串比较函数strcmp()可以对两个字符串大大小进行比较。

strcmp(str1,str2);

其中,str1指代第一个字符串;str2指代第二个字符串,如果相同返回0,如果str1大于str2,返回正值,否则返回负值。

str1和str2可以为数组变量名、指针变量名以及字符串3种形式。其中,数组变量与指针变量基类型必须是char。

3.连接字符串函数

连接字符串函数strcat()可以在一个字符串后添加另外一个字符串。

strcat(a,b);连接字符串函数strcat()会将b指向的字符串连接到a指向的地址末尾处此过程对b无影响。

4.字符串长度函数

字符串长度函数strlen()可以将一个字符串长度进行返回。

strlen(a);其中a可以指带数组变量名,指针变量名及字符串。这里,数组变量与指针变量的基类型必须为char。

5.字符串大/小写转换函数

a.字符串小写转换函数

字符串小写转换函数_strlwr()可以将字符串中的字符全部转换为小写。

_strlwr(s);s指代一个字符串

b.字符串大写转换函数

字符串大写转换函数_strupr()可以将字符串中的字符全部转换为大写。

_strupr(s);其中,s指代一个字符串。