C语言字符串(字符数组)

对于字符,在计算机内部都是用数字(字符编码)来表示的,而字符串是“字符连续排列”的一种表现。字符串就是每个元素内都存储着字符的一维数组,通常称之为字符数组

在 C语言中,因为字符数组的元素内存储的都是 char 型的字符,所以字符数组的数据类型是 char 型,因而字符串实际上就是一个 char 型的一维数组(见图 1 )。

字符数组——字符串的表示
图 1:字符数组——字符串的表示
 
字符串中包含的字符的个数就是这个字符串的长度。C语言中用字符数组存储字符串时在字符串的末端都要加一个字符“\0”来表示这个字符串的结束,这个“\0”称为字符串结束符。因而在定义字符数组时,数组大小应为要存储的字符串长度的最大值加 1。

C语言中字符数组的声明(定义)及初始化格式如下:
#include <stdio.h>
int main( )
{
    char myName[20];
  char string[6] = {'C','h','i','n','a','\0'};
  char month[10] = "September";
  char month2[ ] = "September";
}

定义用于存储字符串的字符数组时,一定要预留足够的字符数组空间容纳最长的字符串,而且还要多增加一个字符空间用于存放字符串结束符‘\0’。

给已经定义好的字符数组中存储字符串(字符串赋值)时,我们不可以使用上述字符数组声明(定义)部分所用的各种初始化字符串的方法。前面讲到的几种初始化字符串的方法,只能在声明(定义)字符数组的时候使用。

在程序其他部分给字符串赋值,必须一次一个字符地赋值给对应的数组元素,或者使用字符串赋值函数 strcpy( ) 来实现(代码清单 2)。

下面的语句将把字符串“April”赋值给已经定义好的字符数组 month:
strcpy(month,"April");

在 C语言程序中,经常会用到字符串的长度。要获得一个字符串的长度通常可以可使用下面两种方法:

1) 使用 strlen(str) 函数:        //求字符数组 str 中存储的字符串的长度
strLen=strlen(month);        //获得字符数组 month 中存储的字符串的长度
2) 使用 sizeof(str) 操作符:   //计算字符数组 str 在内存中所占的字节数
strLen2=sizeof(month);     //获得字符数组 month 有效元素个数,包含‘\0’

操作符 sizeof( ) 用于计算对象在内存中所占的字节数。一个字符占一个字节,字符串数组的末尾还有字符串结束符‘\0’也占一个字节,所以用 sizeof(str) 获得的是字符数组 str 的有效元素数量(数组大小),包含字符串结束符‘\0’,它比存储在里面的字符串的实际长度大 1 (见图 2 )。

字符串长度
字符串长度
图 2:字符串长度

在使用 strcpy() 和 strlen() 的 C 程序中,必须在程序的预处理指令部分添加指令包含 string.h 头文件:
#include <stdio.h>
#include <string.h>
int main( )
{
    char string[6];
    char month[10];
    string[0] = 'C';
    string[1] = 'h';
    string[2] = 'i';
    string[3] = 'n';
    string[4] = 'a';
    string[5] = '\0';
    strcpy(month,"July");             //给字符数组 month 赋值
    int month_len = strlen(month);    //求字符串"July"的长度 4
    int month_len2 = sizeof(month);   //获得字符数组 month 有效元素个数 5(包含字符串结束符'\0')
}

总结

  1. C语言中的字符串是一个 char 型的一维数组。
  2. C语言中用字符串赋值函数 strcpy() 给字符串赋值。
  3. 字符串是每个数组元素内都存储着字符的一维数组。
  4. 字符数组的大小为要存储的字符串长度的最大值加 1。
  5. C语言中用函数 strlen() 获得字符串长度,用 sizeof() 获得字符数组大小。