完整程式碼
#include
#include
char *my_strcpy(char *dest, const char *src) {
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while (*dest++ = *src++) {
; // 空敘述
}
return ret;
}
int main() {
char *p = "Hello world!";
char arr[20];
char *ret = my_strcpy(arr, p);
printf("%s", ret);
return 0;
}
逐行解析
char *ret = dest; 保存起始位址,因 dest 會在迴圈中遞增。
assert:針對空指標提前失效,避免未定義行為。
while (*dest++ = *src++):
‑ 取 *src 值賦給 *dest
‑ 兩指標後移
‑ 以賦值結果為條件,遇 \0 (0) 停止,且 \0 已複製
- 回傳
ret 支援 printf("%s", my_strcpy(buf, src)) 等鏈式用法。
安全性提醒
- 呼叫端必須確保
dest 空間 ≥ strlen(src)+1。
- 生產環境建議使用
strncpy、strcpy_s 或 strlcpy 限制長度。