目录
在上篇内容中我们了解了字符函数和字符串函数的概念,也学习了strlen函数和strcpy函数,接下来
在本篇内容中也将学习4个与此类似的函数。
1.strcat函数
1.1函数功能
strcat 是C语言标准库 <string.h> 中的字符串拼接函数,作用是将源字符串(以空字符 '\0' 结
尾)追加到目标字符串的末尾 。目标字符串原先的结束符 '\0' 会被源字符串的第一个字符覆盖,
拼接完成后,在新的字符串末尾会自动添加一个 '\0' 作为结束标志。
1.2函数原型
char *strcat(char *dest, const char *src);
其中,dest 是目标字符串(其空间要足够容纳拼接后的内容且可修改), src 是源字符串(一般
为只读,用 const 修饰)。函数返回值为指向目标字符串 dest 的指针。
1.3代码演示:
#include <stdio.h>
#include <string.h>
int main() {
char dest[20] = "Hello, ";
char src[] = "world!";
char *result = strcat(dest, src);
printf("%s\n", result);
return 0;
}
上述代码将 "world!" 追加到 "Hello, " 后面,最终输出 "Hello, world!" 。
1.4注意事项
- 源字符串要求:源字符串必须以 '\0' 结尾,否则函数无法判断源字符串的结束位置,会导致错误
的内存访问。
- 目标字符串要求:目标字符串不仅要有 '\0' 标识结束,还得有足够的空间来容纳源字符串的内
容,否则会造成缓冲区溢出,引发程序崩溃等严重问题 。
- 目标空间可修改:目标字符串所在的内存空间必须是可写的,不能是只读区域(如字符串常量
区)。
2.strcmp函数
2.1函数功能
strcmp 是C语言标准库 <string.h> 中的字符串比较函数,用于比较两个字符串的大小,基本信息
如下:
2.2函数原型
int strcmp(const char *str1, const char *str2);
str1 和 str2 是两个要比较的字符串,且都以指针形式传递,const 修饰表明函数不会修改这两个
字符串的内容。
2.3比较原则
从两个字符串的第一个字符开始,自左向右逐个字符按ASCII码值大小进行比较 ,直到出现不同的
字符或者遇到字符串结束符 '\0' 为止:
- 相等情况:如果两个字符串对应位置的字符完全相同,直到其中一个字符串结束(即遇到 '\0' ),则认为这两个字符串相等,函数返回 0。例如, strcmp("abc", "abc") 返回 0 。
- 大于情况:当比较过程中 ,str1 中某个字符的ASCII码值大于 str2 对应位置字符的ASCII码值 ,此时 strcmp 函数返回一个大于 0 的值。比如 strcmp("abc", "abb") ,比较到第三个字符时, 'c' 的ASCII码值大于 'b' ,函数会返回大于 0 的值。
- 小于情况:若比较时 str1 中某个字符的ASCII码值小于 str2 对应位置字符的ASCII码值 ,函数返回一个小于 0 的值。像 strcmp("abb", "abc") ,比较到第三个字符,'b' 的ASCII码值小于 'c' ,函数返回小于 0 的值。
返回值:
- 等于:返回 0 ,表示两个字符串相等。
- 大于:返回大于 0 的值,确切数值因C语言实现而异,常返回 1,表示 str1 大于 str2 。
- 小于:返回小于 0 的值,常返回 -1,表示 str1 小于 str2 。
2.4代码示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "hello";
char str2[] = "world";
char str3[] = "hello";
int result1 = strcmp(str1, str2);
int result2 = strcmp(str1, str3);
if (result1 > 0) {
printf("str1 大于 str2\n");
} else if (result1 < 0) {
printf("str1 小于 str2\n");
} else {
printf("str1 等于 str2\n");
}
if (result2 > 0) {
printf("str1 大于 str3\n");
} else if (result2 < 0) {
printf("str1 小于 str3\n");
} else {
printf("str1 等于 str3\n");
}
return 0;
}
上述代码比较了三组字符串,根据 strcmp 函数的返回值判断字符串之间的大小关系并输出相应信
息。
2.5注意事项
- 只能比较字符串: strcmp 只能用于比较字符串,不能比较数字等其他类型数据。例如,不能用它
直接比较两个整数。
- 区分大小写:比较时严格区分大小写,如 "Apple" 和 "apple" 会被视为不同字符串。
3.strncpy函数
3.1函数定义
strncpy 是C语言标准库 <string.h> 中的字符串复制函数 ,用于将指定长度的字符串复制到字符数
组中。
3.2函数原型
char *strncpy(char *dest, const char *src, size_t n);
dest 是目标字符数组指针,用于存储复制后的字符串; src 是源字符串指针,为被复制的对象;
n 为要从源字符串复制的字符数量 , size_t 是无符号整型。
3.3函数功能
将 src 所指向字符串的前 n 个字符(不包含字符串结束符 '\0' )复制到 dest 所指的数组中。复制
规则如下:
- 源串长度小于 n :若 src 字符串长度小于 n ,则将 src 全部字符复制到 dest 后,在 dest 后续位
置用空字符 '\0' 填充,直至复制完 n 个字节 。比如 src 为 "abc" , n 为 5 ,复制后 dest 内容
为"abc\0\0" 。
- 源串长度大于等于 n :若 src 字符串长度大于等于 n ,则只复制 src 的前 n 个字符到 dest ,不
会自动添加字符串结束符 '\0' ,需手动添加 。例如 src 为 "abcdef" , n 为 3 ,复制后 dest 内容
为 "abc" ,若要正常使用,需手动添加 dest[3] = '\0' 。
返回值:
函数返回指向目标字符串 dest 的指针 。
3.4代码演示:
#include <stdio.h>
#include <string.h>
int main() {
char dest[20];
char src[] = "Hello, world!";
// 复制前5个字符
strncpy(dest, src, 5);
// 手动添加字符串结束符
dest[5] = '\0';
printf("复制结果: %s\n", dest);
return 0;
}
上述代码将 src 字符串的前 5 个字符复制到 dest 数组中,并手动添加结束符后输出。
3.5注意事项
- 内存空间: dest 所指向的内存空间必须足够大,能够容纳复制的字符以及可能需要添加的结束
符 '\0' ,否则会导致缓冲区溢出 。
- 结束符处理:当复制字符数 n 小于等于源字符串实际长度时,不会自动添加结束符 '\0' ,要手
动添加 ,避免出现字符串操作错误。
- 重叠内存:若 src 和 dest 所指内存区域重叠,函数行为未定义,应避免这种情况 。
4.strncmp函数
4.1函数定义
strncmp 是C语言标准库 <string.h> 中的字符串比较函数,用于比较两个字符串的前 n 个字符,
具体介绍如下:
4.2函数原型
int strncmp(const char *str1, const char *str2, size_t n);
其中, str1 和 str2 是要进行比较的两个字符串指针, const 修饰表明函数不会修改字符串内
容: n 是要比较的最大字符数, size_t 是无符号整型 。
4.3比较原则
从两个字符串的第一个字符开始,逐个比较字符的ASCII码值,最多比较 n 个字符 ,有以下几种
情况:
- 相等情况:如果两个字符串的前 n 个字符完全相同,函数返回 0,比如 strncmp("abc", "abc",
3) 返回 0 。
- 大于情况:若在比较的前 n 个字符中, str1 某个字符的ASCII码值大于 str2 对应位置字符的
ASCII码值 ,函数返回一个大于 0 的值。例如 strncmp("abc", "abb", 3) ,比较到第三个字符
时,'c' 的ASCII码值大于 'b' ,函数返回大于 0 的值。
- 小于情况:当在比较的前 n 个字符中, str1 某个字符的ASCII码值小于 str2 对应位置字符的
ASCII码值 ,函数返回一个小于 0 的值。比如 strncmp("abb", "abc", 3) ,比较到第三个字
符,'b' 的ASCII码值小于 'c' ,函数返回小于 0 的值。
此外,若在比较过程中遇到空字符 '\0' ,也会停止比较。
返回值:
- 等于:返回 0 ,:表示两个字符串的前 n 个字符相等。
- 大于:返回大于 0 的值,确切数值因C语言实现而异,常返回 1 ,表示 str1 的前 n 个字符
大于 str2 的前 n 个字符。
- 小于:返回小于 0 的值,常返回 -1 ,表示 str1 的前 n 个字符小于 str2 的前 n 个字符。
4.4代码演示:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "hello";
char str2[] = "hel";
int result = strncmp(str1, str2, 3);
if (result == 0) {
printf("前3个字符相等\n");
} else if (result > 0) {
printf("str1的前3个字符大于str2的前3个字符\n");
} else {
printf("str1的前3个字符小于str2的前3个字符\n");
}
return 0;
}
上述代码比较了 str1 和 str2 的前 3 个字符,并根据 strncmp 函数的返回值输出相应信息。
4.5注意事项
- 长度限制:比较的字符数 n 不能超过字符串实际长度,否则可能访问越界,导致程序异常。
- 区分大小写:和大多数C语言字符串函数一样, strncmp 区分大小写,若需忽略大小写比较,需
自定义函数或使用其他库函数(如 strncasecmp ) 。
- 重叠内存:若 str1 和 str2 所指内存区域重叠,函数行为未定义,应避免这种情况。
以上就是这4个函数的相关内容,内容可能有点多,希望大家能够消化理解,感谢大家的观看!