strcmp与strcpy
strcmp
和strcpy
是 C 语言中处理字符串的两个重要标准库函数,都声明在<string.h>
头文件中,主要用于字符串的比较和复制操作。
1. strcpy 函数(字符串复制)
功能:将源字符串(包括结尾的 '\0')复制到目标字符数组中。
函数原型:
char *strcpy(char *dest, const char *src);
参数说明:
dest
:目标字符数组,用于存储复制后的字符串src
:源字符串(要复制的字符串)
使用注意事项:
目标数组
dest
必须有足够的空间容纳源字符串(包括 '\0'),否则会导致缓冲区溢出源字符串
src
必须以 '\0' 结尾函数返回
dest
的指针
示例:
#include <stdio.h> #include <string.h> int main() { char src[] = "Hello"; char dest[20]; // 确保有足够空间 strcpy(dest, src); // 将src复制到dest printf("复制后的字符串: %s\n", dest); // 输出: Hello return 0; }
2. strcmp 函数(字符串比较)
功能:按照 ASCII 码值比较两个字符串,逐个字符进行比较,直到出现不同字符或遇到 '\0'。
函数原型:
int strcmp(const char *s1, const char *s2);
参数说明:
s1
:第一个要比较的字符串s2
:第二个要比较的字符串
返回值:
若
s1
>s2
,返回正整数若
s1
==s2
,返回 0若
s1
<s2
,返回负整数
使用注意事项:
比较的是字符串内容,而不是字符串长度
两个字符串都必须以 '\0' 结尾
示例:
#include <stdio.h> #include <string.h> int main() { char str1[] = "apple"; char str2[] = "banana"; char str3[] = "apple"; printf("strcmp(str1, str2) = %d\n", strcmp(str1, str2)); // 负整数 printf("strcmp(str1, str3) = %d\n", strcmp(str1, str3)); // 0 printf("strcmp(str2, str1) = %d\n", strcmp(str2, str1)); // 正整数 return 0; }
3. 与数组、字符串的关系
字符串本质上是字符数组,以 '\0' 作为结束标志
strcpy
和strcmp
都是针对以 '\0' 结尾的字符数组设计的对于普通字符数组(非字符串),这两个函数可能无法正确工作
4. 安全问题与替代函数
strcpy
不检查目标数组大小,存在缓冲区溢出风险,建议使用strncpy
strncpy
可以指定最大复制长度:char *strncpy(char *dest, const char *src, size_t n)
类似地,
strncmp
可以指定最大比较长度:int strncmp(const char *s1, const char *s2, size_t n)
使用这些函数时,一定要确保字符串的正确终止和目标缓冲区的足够大小,以避免程序出现不可预期的错误。