酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

手写自定义 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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]