[cpp] view plaincopy
- // 字符串处理函数.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- //编程实现strcpy
- char* strcpy(char* strDest,const char *strSrc){
- if (strDest==NULL||strSrc==NULL)
- {
- return NULL;
- }
- char *temp=strDest;
- while ((*strDest++=*strSrc++)!='\0');
- return temp;
- }
- int getlen(const char *str){
- int len=0;//保存长度
- while (*str++!='\0')
- {
- len++;
- }
- return len;
- }
- //
- //编程实现memcpy,考虑地址重叠情况
- void *memcpy(void *memTo,const void *memFrom,size_t size){
- if ((memTo==NULL)||(memFrom==NULL))
- {
- return NULL;
- }
- char* temp=(char*)memTo; //保存memFrom首地址
- const char* tempFrom=(const char*)memFrom; //保存memTo首地址
- if (temp>tempFrom && temp<tempFrom+size) //如果有地址重叠
- {
- for (int t=size-1;t>=0;--t)
- {
- temp[t]=tempFrom[t];
- }
- }
- else{
- for (int t=0;t<size;++t)
- {
- temp[t]=tempFrom[t];
- }
- }
- return temp;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- char strSrc[20]="abcdefgl";
- char strDest[20];
- int len=0;
- len=getlen(strcpy(strDest,strSrc));
- memcpy(strSrc+2,strSrc+1,4);
- strSrc[2+4]='\0';
- cout<<strDest<<endl;
- cout<<len<<endl;
- cout<<strSrc+2<<endl;
- system("pause");
- return 0;
- }