C语言字符串操作

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函数比较两个字符串str1str2。如果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是安全的,因为它允许指定最大复制的字符数。
  • strcpystrncpy都用于复制字符串,但strncpy提供了额外的控制来避免缓冲区溢出。
  • strcmp用于比较两个字符串,而strcpystrncpy用于复制字符串。
  • strlen仅用于测量字符串的长度,不涉及复制或比较。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值