strcpy 的实现

来源:互联网 发布:大数据导论 编辑:程序博客网 时间:2024/06/11 13:04
// 字符串拷贝.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <assert.h>#define CONTAIN_OF_ZERO_BYTE(n) \(((n - 0x01010101) & (~n)) & 0x80808080)#define TEST(n) (((n - 1) & (~n)) & 0x80)#if 0n = 0   ->   0xFF & 0xFF = 0xFF // 只有0满足:1、减一等于0xFF;2、取反等于0xFFn = 1   ->   0x00 & 0xFE = 0x00n = 2   ->   0x01 & 0xFD = 0x01#endifchar* mystrcpy1(char* dest, const char* src){assert(dest != NULL && src != NULL);char* p = dest;while (*dest++ = *src++);return p;}char* mystrcpy2(char* dest, const char* src){assert(dest != NULL && src != NULL);char* p = dest;int delta = dest - src;while (*(char*)(src + delta) = *src++);return p;}char* mystrcpy3(char* dest, const char* src){assert(dest != NULL && src != NULL);int* s ;int* d ;char* p = dest;s = (int*)src;d = (int*)dest;while (1){if (!CONTAIN_OF_ZERO_BYTE(*s)){*d++ = *s++;continue;}src = (char*)s;dest = (char*)d;while (*dest++ = *src++); // 这个循环最多执行四次break;}return p;}char s1[16];int main(int argc, _TCHAR* argv[]){char s2[16] = "hello123456789";mystrcpy3(s1, s2);printf("s1 = %s\n", s1);return 0;}

0 0