字符串数组:

  • C语言中,没有专门的字符串变量,没有string类型,通常就用一个字符数组存放
  • 字符数组实际上是一系列字符的集合,也就是字符串String
  • 字符串总是以’\0’作为结尾,所以’\0’也被称为字符串结束标志,或者字符串结束符。输出该字符不会有任何效果。
  • C语言在处理字符串时,会从前往后逐个扫描字符,一旦遇到’\0’就认为到达了字符串的末尾,就结束处理
  • 字符串长度:我们使用string.h头文件中的 strlen() 函数来求字符串的长度,该长度不包括最后的结束符’\0’ ```c void main() { char d[]={‘c’, ‘ ‘, ‘p’, ‘r’, ‘o’, ‘g’, ‘r’, ‘a’, ‘m’ };//逐个字符地给数组赋值并不会自动添加’\0’ char d1[10] = {0}; //长度不够,后面的元素会自动初始化为0 等同于\0 char str[30] = {“c.biancheng.net”};//由” “包围的字符串会自动在末尾添加’\0’ 所以如果手动初始化长度的话,需要预留一个位置给\0 char str1[30] = “c.biancheng.net”;//字符串是”” char str2[] = “c.biancheng.net”;

    printf(“%s\n”,d);//printf() 输出字符串时,会从第 0 个元素开始往后检索,直到遇见’\0’才停止,然后把’\0’前面的字符全部输 //所以想要避免逐个字符输出的问题也很容易,在字符串的最后手动添加’\0’ 或者 定义的时候就初始化为0,然后再进行逐个赋值

// 这里需要留意一个坑,字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了 char str3[7]; str3[0] = ‘1’; //注意是单个字符,所以只能是单引号。严格区分字符和字符串 printf(“%c”,str3[0]); getchar(); } ``` 这里需要留意一个坑

  • 字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了
  • 由” “包围的字符串会自动在末尾添加’\0’ 所以如果手动初始化长度的话,需要预留一个位置给\0
  • 逐个字符地给字符串数组赋值并不会自动添加’\0’

    字符

    char str = ‘’;

  • 字符和字符串不同,字符只能存储一个字节,也就是8位,所以只能存储ASCII表中的单个字符。

  • 字符通过‘’单引号定义

    字符串处理函数

    我们通过引入string头文件来处理字符串

这里只讲述常见的

字符串拼接: strcat()

  1. `strcat(arrayName1, arrayName2);`<br /> 将把 arrayName2 连接到 arrayName1 后面,并删除原来 arrayName1 最后的结束标志'\0'。这意味着,arrayName1 必须足够长,要能够同时容纳 arrayName1 arrayName2,否则会越界(超出范围)。<br /> **返回值**为 arrayName1 的地址

字符串复制替换:strcpy()

  1. ` strcpy(arrayName1, arrayName2);`<br /> arrayName1会被arrayName2覆盖<br /> 要求 arrayName1 要有足够的长度,否则不能全部装入所拷贝的字符串。

字符串比较: strcmp()

strcmp(arrayName1, arrayName2);
字符本身没有大小之分,strcmp() 以各个字符对应的 ASCII 码值进行比较。strcmp() 从两个字符串的第 0 个字符开始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。
返回值:
若 arrayName1 和 arrayName2 相同,则返回0;
若 arrayName1 大于 arrayName2,则返回大于 0 的值;
若 arrayName1 小于 arrayName2,则返回小于0 的值。