在正式介绍字符串之前,我们必须了解c语言中的两个概念,第一个是字符串字面量,第二个是字符常量。举个例子,"a"是字符串字面量,而'a'为字符常量,细心的小伙伴已经看到了,影响他们不同的因素在于头上的引号,单引号为字符常量,双引号为字符串字面量,又叫字符串常量。
在C语言中,为了确定字符串的长度,C编译器自动在字符串的末尾添加了一个ASCII码值为0的空操作符' '作为字符串的结束标志,并不作为显式。所以,字符串其实就是由若干有效字符组成且以'字符 '结束的一个字符序列。
c语言中没有专门给出字符串数据类型,我们在涉及到字符串储存时,往往是借用字符型数组来实现储存,且判断字符型数组是否存储的是一个字符串,则需要看是否以' '结束。特殊的是' '占用一个字符字节,但不计入字符串的实际长度,却要计入数组长度。这句话再怎么来理解呢?我们看看下面的代码就清楚了:
char str[6]={'H','e','l','l','o',' '};
我们借助字符型数组定义了一个长度为5的字符串,但是对应数组需要储存6个,否则它不代表一个字符串。
可能有小伙伴见过这样的字符串定义形式:
char str[ ]={'H','e','l','l','o',' '};
这样的定义直接忽略掉数组的长度,由系统自动分配也是可以的,但如果是下面的就不行
char str[ ]={'H','e','l','l','o'};
可能有小伙伴会产生疑惑,为什么上面的就可以,下面的就不行了,这是因为在字符串定义时,我们一定要强调最后的' ',否则编译器不会把我们定义的这个字符型数组当作一个字符串处理,也就是必须把' '加上,系统才会明白我们存储的是一个以' '结束的字符串。
可能有大部分小伙伴都觉得这样定义是不是太繁琐了,有没有更简单的方法,可以让系统自己明白我存储的是一个字符串呢?答案肯定是有的。往下面介绍的定义方法就要设计到第一段说的字符串字面量也就是字符串常量的定义方法了。简单来说就是用双引号。因为字符型是单引号,要区分字符型,我们就引入了双引号的区别办法。如:
char str[ ]={"Hello"};
或者:
char str[ ]="Hello";//推荐理解这种定义,因为最简单
上述的均为存储一个字符串的情况,那么在我们涉及到存储多个字符串的时候,我们采用的是利用二维的字符型数组去存储字符串,如我们要把周一到周日对应的英文(字符串)存到一个二维的字符型数组中去,那我们该怎么写这段代码呢?
char str[7][10]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
我们定义了一个7行10列的二维字符型数组,每一行存储了一个字符串,所以用的是双引号,我们来看看这七个字符串在内存中是怎么存储的:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
| 0 | M | o | n | d | a | y |


