前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C语言】strcpy与strncpy函数的使用和模拟实现

【C语言】strcpy与strncpy函数的使用和模拟实现

作者头像
用户11328191
发布2024-10-23 14:38:47
1170
发布2024-10-23 14:38:47
举报
文章被收录于专栏:li_wait

一.strcpy的使用与模拟实现

char* strcpy(char * destination, const char * source ); 

使用注意事项:

• 源字符串必须以 '\0' 结束。 • 会将源字符串中的 '\0' 拷贝到目标空间。 • 目标空间必须足够大,以确保能存放源字符串。 • 目标空间必须可修改。

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
int main()
{
    char dest[10];
    const char *src = "hello";
    strcpy(dest, src);
    printf("复制的字符串:'%s'\n", dest);
    return 0;
}

模拟实现:

代码语言:javascript
复制
char *my_strcpy(char *dest, const char*src)
{
    char *ret = dest;
    assert(dest != NULL);
    assert(src != NULL);
    while((*dest++ = *src++))
    {
        ;
    }
    return ret;
}

        strcpy 不检查目标缓冲区的大小,因此如果目标缓冲区不够大,可能会导致缓冲区溢出,这是一个严重的安全风险。建议使用 strncpy并指定最大复制长度,以避免这种风险。

二.strncpy的使用与模拟实现

char * strncpy ( char * destination, const char * source, size_t num ); 

使用注意事项:

拷贝num个字符从源字符串到目标空间。

如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
int main()
{
    char dest[10];
    const char *src = "hello world";
    strncpy(dest, src, 5);
    dest[5] = '\0'; // 注意:必须手动添加终止空字符
    // 现在 dest 是 "hello"
    return 0;
}

模拟实现

代码语言:javascript
复制
char *my_strncpy(char *dest, const char *src, size_t n) {
    char *dest_save = dest;
    while (n && *src) {
        *dest++ = *src++;
        n--;
    }
    while (n--) {
        *dest++ = '\0'; // 如果 n 大于 src 字符串的长度,填充剩余位置为空字符
    }
    return dest_save;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.strcpy的使用与模拟实现
  • 二.strncpy的使用与模拟实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档