C语言字符串数组的用法

  介绍

这篇文章主要讲解了“C语言字符串数组的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言字符串数组的用法”吧!

C语言字符串数组

字符串是连续的字符序列,最后以空字符& # 39;\ 0 & # 39;作为终止符。一个字符串的长度指所有字符的数量,但不包括终止符。在C语言中,没有字符串类型,自然也就没有运算符以字符串为操作数。

字符串被存储在元素类型为char或宽字符类型数组中(宽字符类型指wchar_t, char16_t或char32_t)。宽字符组成的字符串也称为宽字符串(宽字符串)。

C标准库提供了大量的函数,它们可以对字符串进行基本操作,例如字符串的比较,复制和连接等。在这些传统的字符串函数以外,C11新增了这些函数的“安”全版本,它们能确保字符串操作不会超出数组的边界。

可以使用字符串字面量来初始化任何字符类型数组。例如,下面两个数组的定义是等价的:

char  str1[30],=,“还是# 39;s  go",,,,,,,,,,,,,,//,字符串长度:8;数组长度:30   char  str1 [30],=, {, & # 39; l # 39;,, & # 39; e # 39;,, & # 39; t # 39;,, & # 39; \ & # 39; & # 39;,, & # 39; & # 39;, & # 39;, & # 39;,, & # 39;舌鳎# 39;,,& # 39;o # 39;,, & # 39; \ 0 & # 39;,},

存储字符串的数组一定比字符串长度多一个元素,以容纳下字符串终止符(空字符& # 39;\ 0 & # 39;)。因此,str1数组能够存储的字符串最大长度是29。如果定义数组长度为8,而不是30岁,就会发生错误,因为它无法包含字符串终止符。

如果在定义一个字符数组时,没有显式地指定长度,但使用了字符串字面量来对它进行初始化,该数组的长度会比字符串长度多1。如下列所示:

char  str2[],=,,,用伦敦!“,,,,,//,字符串长度:11,(注意开头的空格);   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,//,数组长度:12

下面的语句使用标准函数strcat()把字符串str2附加到字符串str1的后面(str1数组长度必须足够大以容纳连接后的全部字符)。

# include  & lt; string.h>   char  str1[30],=,“还是# 39;s  go";   char  str2[,],=,,,用伦敦!“;/*,…*/strcat (str1的不同之处是,str2 );   把(),str1 

调用把()后,输出新的str1数组内容:

还是# 39;s  go 用伦敦!

str1和str2的名字其实是两个指针,它们指向各自数组的第一个字符。这样的指针被称为指向字符串的指针(指向字符串的指针),或者简称为字符串指针(字符串指针)。

字符串处理函数(例如scrcat()和())把需要接收字符串起始地址并将其作为参数。这样的函数通常逐个字符地处理字符串,直到遇到结尾终止符& # 39;\ 0 & # 39;为止。
1例是函数strcat()的另—种可能的实现方式。它采用从函数参数传入的指针遍历处理整个字符串。【例1】函数strcat ()

//,函数strcat(),将第二个字符串复制一份并附加到第一个字符串的尾部//,参数:指向两个字符串的指针//,返回值:指向第一个字符串的指针,此时已将第二个字符串连接到了其尾部   char  * strcat (, char  *, restrict  s1, const  char  *, restrict  s2 )   {   char 才能;* rtnPtr =, s1;   while 才能;(,* s1  !=, & # 39; \ 0 & # 39;,),,,,,,,,,,,,,,,,,,,,,,,,,//,找到字符串s1的尾部   ,,,+ + s1;   while 才能;((,* s1 + +=, * s2 + +,), !=, & # 39; \ 0 & # 39;,),,,,//,将s2的首字符替换掉s1的终止符   ,,,,   return 才能;rtnPtr;   }

以s1地址为起始位置的字符数组,其长度至少是两个字符串长度的和再加1上,以容纳字符串终止符。在调用strcat()之前,可以采用标准函数strlen()进行测试,以确保长度没有问题,函数strlen()返回其字符串参数的长度,如下所示:

if  (, sizeof (str1)祝辞=,(,strlen (), str1 , +, strlen (), str2 , +, 1,),)   ,,strcat (str1的不同之处是,str2 );

宽字符串字面量会加上一个前缀L u或u,它们是宽字符串的标志,因此,wchar_t数组的初始化过程如下所示:

# include  & lt; stddef.h>,,,,,,,,,,,,,,,,,,,,,,,,//,定义wchart_t类型/*,…*/wchar_t 晚餐[],=,L" chop  suey",,,,,,,,,//,字符串长度:10;   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,//,数组长度:11;   ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,//,数组空间大小:11,*,sizeof (wchar_t)

C语言字符串数组的用法