char* my_strcpy(char* dest, const char* src){ assert(dest && src); char* ret = dest; while (*dest++ = *src++) { ; } return ret;}int main(void){ char str1[10] = "xxxxxxxxx"; char str2[] = "hello"; printf("str1 = %s\n", my_strcpy(str1, str2)); return 0;
时间: 2025-04-08 15:11:58 浏览: 31
### C语言自定义 `strcpy` 函数的实现与用法
#### 自定义 `my_strcpy` 的实现
为了实现一个类似于标准库中 `strcpy` 的功能,可以通过逐字符复制的方式完成。以下是基于引用内容和专业知识设计的一个自定义版本:
```c
#include <assert.h>
char* my_strcpy(char* dest, const char* src) {
assert(dest != NULL && src != NULL); // 确保指针不为空
char* original_dest = dest; // 记录原始目的地地址
while ((*dest++ = *src++) != '\0'); // 复制直到遇到字符串结束符'\0'
return original_dest; // 返回指向目标缓冲区起始位置的指针
}
```
上述代码实现了基本的功能逻辑,并通过断言验证输入参数的有效性[^4]。
---
#### 使用示例
下面是一个完整的程序示例来展示如何调用该函数并打印结果:
```c
#include <stdio.h>
#include <string.h>
#include <assert.h>
// 自定义 strcpy 函数
char* my_strcpy(char* dest, const char* src) {
assert(dest != NULL && src != NULL);
char* original_dest = dest;
while ((*dest++ = *src++) != '\0');
return original_dest;
}
int main() {
char str1[] = "Sample string";
char str2[40] = {0};
printf("Before copying:\n");
printf("str1: %s\nstr2: %s\n", str1, str2);
my_strcpy(str2, str1); // 调用自定义函数进行字符串复制
printf("After copying:\n");
printf("str1: %s\nstr2: %s\n", str1, str2);
return 0;
}
```
运行此代码后,可以看到 `str2` 成功被赋予了 `str1` 中的内容[^1]。
---
#### 关键点解析
1. **指针操作**
在循环内部使用了 `(dest++, src++)` 来逐步移动两个指针的位置,从而逐一处理源字符串中的每一个字符直至 `\0` 结束标志为止[^5]。
2. **返回值意义**
函数最终返回的是最初传入的目标缓冲区首地址 (`original_dest`) ,这使得它可以像原生 `strcpy` 那样链式调用。
3. **边界条件检查**
利用了 `<assert.h>` 库确保传递给函数的指针均有效 (非空),这是良好编程习惯的一部分。
---
#### 注意事项
- 如果目标数组空间不足,则可能导致未定义行为或溢出错误。因此,在实际应用前需确认其容量足够容纳整个源串加终止符`\0`[^2]。
- 不要尝试将同一内存区域作为源和目的同时指定给本函数执行覆盖操作[^3]。
---
阅读全文
相关推荐














