字符数组与字符串

字符串中的 0 元素

  • 整数 0 即字符串中的 0 元素(char 是最小的整形)
  • 0 元素对应的字符为 ‘\0’(转义字符)
  • ‘0’ 与 ‘\0’ 不同,表示一个非 0 值,对应的整数为 48
1
2
3
4
5
6
#include<stdio.h>

void main() {
printf("%d\n", '\0'); // 0
printf("%d\n", '0'); // 48
}

字符串变量-字符数组

  • C语言中通过字符数组定义字符串
  • 当字符串中存在 0 元素时,可当作字符串使用
  • 字符数组中的 0 元素表示了一个字符串的结束
  • 字符数组中的元素,不一定是字符串中的元素
    • 这里指的是 ‘\0’
1
2
char ss[] = {'D', '.', 'T', '.', '\0'}; // 此处 ss 是一个字符串
printf("%s\n", ss); // D.T.
  • 可以使用字符串常量进行初始化
  • 字符串长度 小于 字符数组大小
1
2
3
4
5
6
7
8
9
10
11
12
13
char dt[] = "abcd";
char name[] = {"D.T.Software"};
int ds = sizeof(dt);
int ns = sizeof(name);

printf("dt = %s\n", dt); // abcd
printf("name = %s\n", name); // D.T.SoftWare
printf("dt size = %s\n", ds); // 5 字符串长度比字符数组少了一个 \0
printf("name size = %s\n", ns); // 13

for(int i = 0; i < ds; i++){
printf("%d ", dt[i]); // 97 98 99 100 0
}
  • 一个字符数组不一定是一个字符串
  • 而一个字符串一定是一个字符数组

string.h 字符串工具包

  • strlen(s) -> 获取字符串的长度
  • strcpy(s1, s2) -> 将 s2 中的字符复制到 s1,s1 <- s2
  • strcat(s1, s2) -> 将 s2 追加到 s1 后面,s1 <- s1 + s2
  • strcmp(s1, s2) -> 比较 s1 和 s2 是否相等,相等为 0

字符串常量

  • 字符串常量的本质是字符数组,字符数组大小为 字符串长度 + 1
  • 使用字符串工具进行字符串赋值时
    • 必须保证存储赋值结果的字符串足够大(防止越界)
    • 必须保证参与赋值的字符串必须合法(字符数组存在 0 元素)