C 语言中的 string.h 头文件
主要的几个函数如下所示.1
2
3
4
5
6size_t strlen (const char *str);
char *strcpy (char *dest, const char *src);
char *strncpy (char *dest, const char *src, size_t n);
char *strcat (char *dest, const char *src);
char *strncat (char *dest, const char *src, size_t n);
int strcmp (const char *str1, const char *str2);
strlen
1 | size_t my_strlen(const char *str); |
- 返回当前字符串的长度, 即字符串末尾空字符
'\0'
前面的字符数量.
strcpy 和 strncpy
1 | char *strcpy(char *dest, const char *src); |
返回值为指向 dest 的指针.
strcpy
strcpy
函数将src
中以空字符'\0'
结束的字符串复制到dest
中- 返回指向
dest
的指针 - 如果
dest
不够大, 就会因数组越界而产生未定义行为
strncpy
strncpy
函数会将最多 n 个字符从src
中复制到dest
中n <= strlen(src)
时 src 末尾'\0'
不会被复制过去n > strlen(src)
剩余的字符由'\0'
补上
实际开发中, 建议将 n 的值设定为 dest 长度 -1, 并主动将 dest 的最后一个元素设置为空字符, 这样总能安全地得到一个字符串.
strcat 和 strncat
1 | char *strcat(char *dest, const char *src); |
返回值为指向 dest 的指针.
函数将 src 拼接到 dest 末尾, 假设 dest_end 为 dest 末尾空字符的地址, 则函数可以如下理解.
strcat(dest, end);
- 可以理解为
strcpy(dest_end, src);
- 可以理解为
strncat(dest, end, n);
- 可以理解为
strncpy(dest_end, src, n);
- 可以理解为
实际开发中可以这样设置 n1
2// dest 数组的长度 - 已存储字符串的长度 - 1 (留 1 个位置给空字符)
int n = sizeof(dest) - strlen(dest) - 1;
并主动将 dest 的最后一个元素设置为空字符, 这样总能安全地得到一个字符串.
strcmp
1 | int strcmp(const char *str1, const char *str2); |
strcmp 函数按照字典顺序比较两个字符串的大小, 即 ASCII 码的编码值大的一方大.
该函数会依次比较同一位置的字符大小, 直到两字符不同或者到达’\0’字符.
- 若 str1 和 str2 所有字符相同, 则返回值为
0
- str1 大, 返回值为正
- str2 大, 返回值为负
若有一方到达了空字符, 另一方未到达空字符, 由于空字符的编码值为 0, 必定小于其他字符, 即 字符串长度大的 > 字符串长度小的