strcpy - 字符串复制函数
- 用途:将一个字符串复制到另一个字符串中。
- 原型:
char *strcpy(char *dest, const char *src);
- 描述:
strcpy
函数从src
指向的位置开始复制字符,直到遇到空字符('\0'
),然后将空字符复制到dest
指向的位置。它不检查目标数组的大小,如果目标数组不够大,可能会造成缓冲区溢出。
char src[] = "Hello";
char dest[10];
strcpy(dest, src); // 正确使用
strncpy - 安全字符串复制函数
- 用途:将一个字符串复制到另一个字符串中,可以指定最大复制的字符数。
- 原型:
char *strncpy(char *dest, const char *src, size_t n);
- 描述:
strncpy
函数从src
开始复制最多n
个字符到dest
。如果src
的长度小于n
,在dest
中剩余的字符将被填充为null字符('\0'
)。这个函数比strcpy
更安全,因为它可以防止缓冲区溢出。
char src[] = "Hello, World!";
char dest[14];
strncpy(dest, src, 13); // 复制前13个字符,包括空字符
dest[13] = '\0'; // 确保字符串正确终止
自定义实现复制函数
#include <stdio.h>
char *my_strcpy(char *dest, const char *src) {
// 'p' 用于遍历源字符串
// 'q' 用于在目标字符串中放置字符
char *p = (char *)src; // 源字符串的指针
char *q = dest; // 目标字符串的指针
// 循环直到遇到空字符(字符串结束标志)
while (*p != '\0') {
*q = *p; // 复制当前字符
p++; // 移动源字符串指针到下一个字符
q++; // 移动目标字符串指针到下一个位置
}
// 在目标字符串的末尾放置空字符
*q = '\0';
// 返回目标字符串的起始地址
return dest;
}
int main() {
char src[] = "Hello, World!";
char dest[20]; // 确保目标数组足够大
// 使用自定义的strcpy函数
my_strcpy(dest, src);
printf("Copied string: %s\n", dest);
return 0;
}
strcmp - 字符串比较函数
- 用途:比较两个字符串。
- 原型:
int strcmp(const char *str1, const char *str2);
- 描述:
strcmp
函数比较两个字符串str1
和str2
。如果str1
等于str2
,返回0
;如果str1
大于str2
,返回大于0
的值;如果str1
小于str2
,返回小于0
的值。比较是基于ASCII值进行的。
const char *str1 = "Example";
const char *str2 = "example";
if (strcmp(str1, str2) == 0) {
// 字符串相同
}
strlen - 字符串长度函数
- 用途:计算字符串的长度。
- 原型:
size_t strlen(const char *str);
- 描述:
strlen
函数返回字符串str
的长度,不包括结尾的空字符('\0'
)。它是测量字符串长度的常用方法,因为它会一直计数直到遇到空字符。
const char *str = "Hello, World!";
size_t length = strlen(str); // 长度为13
总结
strcpy
不安全,因为它不检查目标数组的大小,而strncpy
是安全的,因为它允许指定最大复制的字符数。strcpy
和strncpy
都用于复制字符串,但strncpy
提供了额外的控制来避免缓冲区溢出。strcmp
用于比较两个字符串,而strcpy
和strncpy
用于复制字符串。strlen
仅用于测量字符串的长度,不涉及复制或比较。