strcpy和strncpy摘于linux 内核源码的/lib/string.c
char *self_strcpy(char *dest, const char *src) { char *tmp = dest; while ((*dest++ = *src++) != '\0') /* nothing */; return tmp; } char *self_strncpy(char *dest, const char *src, size_t count) { char *tmp = dest; while (count) { if ((*tmp = *src) != 0) src++; tmp++; count--; } return dest; }
针对处理self_strncpy_s函数接口
个人定义self_strncpy_s接口,目的是解决,防止溢出,在不够buffer时可以处理最大值的字符串数据。
例如:
|0000000000| |xxxxxxxxxxx| 复制到 |00000000| 得到结果是 |xxxxxxxxx|
源码实现:
char *self_strncpy_s(char *dest, size_t buffer, const char *src, size_t size) { if (size > buffer) size = buffer; char *tmp = dest; while (size) { if ((*tmp = *src) != 0) src++; tmp++; size--; } dest[buffer] = '\0';/*avoid ending symbol character*/ return dest; }
Life is mess, don't let mess mess us.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了