首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 標準庫函數手寫實現:strcpy、strcat、strcmp、memcpy、memmove

     編輯:關於C語言

1. strcpy

char *my_strcpy(char *dst, const char *src) {
    assert(dst && src);
    char *ret = dst;
    while ((*dst++ = *src++) != '\0');
    return ret; // 支援鏈式調用
}

2. strcat

char *my_strcat(char *dst, const char *src) {
    assert(dst && src);
    char *ret = dst;
    while (*dst) dst++;
    while ((*dst++ = *src++) != '\0');
    return ret;
}

3. strcmp

int my_strcmp(const char *s1, const char *s2) {
    assert(s1 && s2);
    while (*s1 && *s1 == *s2) { s1++; s2++; }
    return *s1 - *s2;
}

4. memcpy

void *my_memcpy(void *dst, const void *src, size_t n) {
    assert(dst && src);
    char *d = dst; const char *s = src;
    while (n--) *d++ = *s++;
    return dst;
}

5. memmove(處理重疊)

void *my_memmove(void *dst, const void *src, size_t n) {
    assert(dst && src);
    char *d = dst; const char *s = src;
    if (d > s && d < s + n) { // 目標在源之後且重疊 → 逆向拷貝
        d += n; s += n;
        while (n--) *--d = *--s;
    } else { // 正向拷貝
        while (n--) *d++ = *s++;
    }
    return dst;
}

測試主程序

int main() {
    char a[20], b[] = "hello";
    my_strcpy(a, b);
    my_strcat(a, " world");
    printf("%s\n", a); // hello world
    int arr1[5]={1,2,3,4,5}, arr2[5];
    my_memcpy(arr2, arr1, 20);
    my_memmove(arr1+2, arr1, 12); // 重疊測試
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved