標準庫 strcpy 行為
- 將
src 指向的字符串(含 \0)拷貝到 dest;
- 返回
dest 原始值,支持鏈式調用;
- 行為未定義:
dest 空間不足、重疊、空指針。
手寫實現
#include <stdio.h>
#include <assert.h>
char *my_strcpy(char *dest, const char *src) {
assert(dest && src); // 防禦性編程
char *ret = dest; // 保存返回值
while ((*dest++ = *src++)) ; // 拷貝含 \0,遇 \0 為 0 結束
return ret;
}
int main() {
char *src = "Hello world!";
char dest[20];
printf("%s\n", my_strcpy(dest, src)); // 鏈式調用直接打印
return 0;
}
關鍵細節
const char *src 承諾不修改源串;
while (*dest++ = *src++) 經典寫法:賦值表達式值為賦值結果,\0 為 0 假結束循環;
- 返回
ret 而非 dest(已移至末尾);
- 生產代碼應用
strncpy 或檢查目標緩衝區大小。