一些面试基础知识点(2)

strcp strlcp memcp的实现,又写了一遍,也不知道是第几遍了。目标串的容量,字符串重叠,宽字符,四字节优化这些东西不考虑了。

 

char* strcp(char* dest, const char* src) {
    assert(dest != NULL);
    assert(src != NULL);
    if (dest == NULL || src == NULL) return NULL;

    char* save = dest;
    while((*dest++ = *src++) != '\0') {
    }

    return save;
}

size_t strlcp(char* dest, const char* src, size_t size) {
    assert(dest != NULL);
    assert(src != NULL);
    if (dest == NULL || src == NULL || size == 0) return 0;

    size_t size_ret = 0;
    size_t n = size;
    while((*dest++ = *src++) != '\0') {
        if (0 == --n) break;
        size_ret++;
    }
    dest--;
    *dest = '\0';

    return size_ret + 1;
}

void* memcpy(void* dest, void* src, size_t n) {
    assert(NULL != dest);
    assert(NULL != src);
    if (NULL == dest || NULL == src || 0 == n) return NULL;

    void* ret = dest;
    char* dest_temp = (char*) dest;
    char* src_temp = (char*) src;
    while (n--) {
        *dest_temp++ = *src_temp++;
    }
    return ret;
}

 

posted @ 2011-01-06 21:47  hjtc  Views(403)  Comments(0Edit  收藏  举报