手写自定义 strncpy 函数:不依赖标准库实现字符串前 n 个字符拷贝
以下是实现 `MyStrNcpy` 函数的代码: ```c #include <stdio.h> // 自定义的 strncpy 函数 char *MyStrNcpy(char *dst, const char *src, int n) { char *original_dst = dst; // 保存 dst 的原始地址,以便最后返回 int i; // 拷贝 src 的前 n 个字符到 dst for (i = 0; i < n && src[i] != '\0'; i++) { dst[i] = src[i]; } // 如果 src 的字符少于 n 个,用 '\0' 填充 dst 直到 n 个字符 for (; i < n; i++) { dst[i] = '\0'; } return original_dst; // 返回指向 dst 的指针 } // 测试代码 int main() { char src1[] = "Hello"; char dst1[10]; MyStrNcpy(dst1, src1, 3); printf("dst1: %s\n", dst1); char src2[] = "Hi"; char dst2[5]; MyStrNcpy(dst2, src2, 5); printf("dst2: %s\n", dst2); return 0; } ``` 代码解释: 1. 保存原始指针:在函数开始时,保存 `dst` 的原始地址到 `original_dst` 中,因为后续操作可能会改变 `dst` 的指向,最后需要返回原始的 `dst` 指针。 2. 拷贝前 n 个字符:使用 `for` 循环遍历 `src` 的前 `n` 个字符,将其拷贝到 `dst` 中。如果在拷贝过程中遇到 `'\0'`,则停止拷贝。 3. 填充 `'\0'`:如果 `src` 的字符少于 `n` 个,使用另一个 `for` 循环将 `'\0'` 填充到 `dst` 中,直到 `dst` 有 `n` 个字符。 4. 返回指针:最后返回保存的原始 `dst` 指针。 复杂度分析: - 时间复杂度:$O(n)$,因为只需要遍历 `src` 的前 `n` 个字符和填充 `dst` 到 `n` 个字符。 - 空间复杂度:$O(1)$,只使用了常数级的额外空间。 ######[AI问答 | 575点数解答 | 2025-12-23 11:05:53]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- "Fixing the Bugs in C Code: Correcting `gets`, `strlen`, and Pointer Usage"(GPT | 664点数解答 | 2024-12-06 09:27:31)285
- C 语言实现链表操作:创建、输出、删除及插入功能详解(字节豆包 | 534点数解答 | 2024-12-09 21:33:48)355
- C语言实现链表创建、输出、删除与插入操作的完整代码及注意要点(字节豆包 | 609点数解答 | 2024-12-18 12:18:21)372
- C++ 求解:最少操作次数让字符串无子串 “friend” (字节豆包 | 153点数解答 | 2024-08-17 16:29:54)492
- C++ 求解:最少操作次数让字符串不再含 “friend” 子串!(讯飞星火 | 260点数解答 | 2024-08-17 16:30:49)475
- Python 巧解:最少操作次数让字符串告别“friend”子串(字节豆包 | 139点数解答 | 2024-08-18 13:04:14)415
- 3414 数字游戏:Python 求解 8 位 01 字符串中 1 的个数 (字节豆包 | 106点数解答 | 2024-10-27 14:23:27)441
- 巧用字符添加,计算字符串中“our”最大数量及开发注意要点(DeepSeek | 376点数解答 | 2025-10-30 19:20:06)91
- C 语言实现:处理字符串生成最多 “our” 串,附代码及关键开发注意点 (DeepSeek | 257点数解答 | 2025-10-30 19:20:36)124
- Python实现多功能文字处理软件:含代码、解释与注意事项(DeepSeek | 449点数解答 | 2025-12-18 18:01:25)58
- Android开发自定义 Handler :七大策略有效规避内存泄漏!(百度文心 | 526点数解答 | 2023-11-09 17:34:21)297