char *strcpy(char *dest, const char *src) {
char *ret = dest;
while ((*dest++ = *src++) != '\0');
return ret;
}
\0 為 0 結束循環。dest 支援鏈式:strcpy(buf, strcpy(buf2, src))。char buf[10]; strcpy(buf, "too long string"); → 未定義行為。strcpy(buf+2, buf); → 行為未定義(需用 memmove)。const char*,防止誤修改來源。// strncpy:不保證以 \0 結尾,需手動補齊
strncpy(dest, src, n-1); dest[n-1] = '\0';
// strlcpy (BSD/Linux):保證 \0 結尾,回傳來源長度
size_t strlcpy(char *dst, const char *src, size_t size);
// strcpy_s (C11 Annex K):強制檢查緩衝區大小
errno_t strcpy_s(char *dest, size_t destsz, const char *src);
文章僅給出極簡片段:
cpystr( * source, *(*target++ = *source++
strlen( * size = (*str++ != ++
main(* s = c[strlen(s)] * p =
片段不完整,且 c[strlen(s)] 缺少 +1 空間給結束符,存在溢位隱患。
strcpy,解釋循環條件與回傳值。wcscpy)。strlcpy 或 strcpy_s 用法。strlen 實現、strcmp、strcat 同樣存在緩衝區風險。手寫 strcpy 是 C 指標功力的入門考題,能否寫出正確、安全、符合標準庫行為的版本,直接反映工程基礎扎實度。