char *strcpy(char *strDest, const char *strSrc) {
assert((strDest != NULL) && (strSrc != NULL));
char *address = strDest;
while ((*strDest++ = *strSrc++) != '\0');
return address;
}
address = strDest,因為後續循環會移動 strDest 指針。*strDest++ = *strSrc++ 同時完成賦值、指針後移、判斷是否為結束符 '\0'。strDest 已指向字符串末尾,必須返回保存的 address 以便鏈式調用。strDest 會導致調用者得到字符串末尾地址,而非開頭。NULL。strcpy 不檢查長度,建議使用 strncpy 或 strlcpy。
strSrc: [H][e][l][l][o][\0]
↑
strDest: [ ][ ][ ][ ][ ][ ]
↑
address 保存此處
循環結束後,strDest 指向 \0 後一位,address 仍指向首字符。
現代 libc 多使用向量化指令(SSE/AVX)按塊拷貝,並處理對齊優化,但邏輯核心一致。