strcmp与strcpy(数组,字符串)

发布于:2025-07-29 ⋅ 阅读:(18) ⋅ 点赞:(0)

strcmp与strcpy

strcmpstrcpy是 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' 作为结束标志

  • strcpystrcmp都是针对以 '\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)

使用这些函数时,一定要确保字符串的正确终止和目标缓冲区的足够大小,以避免程序出现不可预期的错误。


网站公告

今日签到

点亮在社区的每一天
去签到