字符串的存储方式有字符数组和字符指针,我们先来看看字符数组。
因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别对这些字符进行存储,即通过字符数组存储。字符数组是一个数组,且是存储字符的数组,该数组中一个元素存放字符串的一个字符。

字符数组的定义

因为字符数组首先是一个数组,所以前面讲的数组内容通通都适用。其次它是存放字符的数组,即数组的类型是 char 型。比如:
char name[10];表示定义了 10 字节的连续内存空间。
1) 如果字符串的长度大于 10,那么就存在语法错误。这里需要注意的是,这里指的“字符串的长度”包括最后的 '\0'。也就是说,虽然系统会自动在字符串的结尾加 '\0',但它不会自动为 '\0' 开辟内存空间。所以在定义数组长度的时候一定要考虑 '\0'。
2) 如果字符串的长度小于数组的长度,则只将字符串中的字符赋给数组中前面的元素,剩下的内存空间系统会自动用 \0' 填充。

字符数组的初始化

字符数组的初始化与数组的初始化一样,要么定义时初始化,要么定义后初始化。下面写一个程序来说明这个问题:
# includeint main(void) { char a[10]; a[0] = 'i'; a[1] = ' '; a[2] = 'l'; a[3] = 'o'; a[4] = 'v'; //空格字符的单引号内一定要敲空格 a[5] = 'e'; a[6] = ' '; a[7] = 'y'; a[8] = 'o'; a[9] = 'u'; //空格字符的单引号内一定要敲空格 a[10] = '\0'; char b[10]; b[0] = 'i'; b[1] = ' '; b[2] = 'm'; b[3] = 'i'; b[4] = 's'; //空格字符的单引号内一定要敲空格 b[5] = 's'; b[6] = ' '; b[7] = 'y'; b[8] = 'o'; b[9] = 'u'; //空格字符的单引号内一定要敲空格 char c[] = "i believe you"; char d[] = {'i', ' ', 'l', 'i', 'k', 'e', ' ', 'y', 'o', 'u','\0'}; //空格字符的单引号内一定要敲空格 char e[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'}; //空格字符的单引号内一定要敲空格 char f[] = "上课睡觉觉, 下课打闹闹, 考试死翘翘"; char g[10] = ""; printf("a = %s\n", a); //输出字符串用%s, 输出参数必须写数组名 printf("b = %s\n", b); printf("c = %s\n", c); printf("d = %s\n", d); printf("e = %s\n", e); printf("f = %s\n", f); printf("g = %s\n", g); return 0; }输出结果是:
a = i love you
b = i miss you烫i love you
c = i believe you
d = i like you
e = Hello World蘨like you
f = 上课睡觉觉, 下课打闹闹, 考试死翘翘
g =