酷代码 AI
菜单

本题要求编程实现“n"族字符串拷贝函数功能strncpy(),而不使用标准库自带函数。 函数接口定义: char *MyStrNcpy(char *dst, const char *src, int n); 此函数把字符串src中的前n个字符复制到到dst所指向的内存空间。 (1)如果src指向的字符串少于n个字符,则将'\0'加到dst的尾部,直到满足n个字符为止; (2)如果src指向的字符串大于n个字符,则拷贝src的前 n个字符到dst; (3)返回指向dst的指针。

以下是实现 `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)$,只使用了常数级的额外空间。 [2025-12-23 11:05:53 | AI问答 | 575点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多