代码题--C++--字符串拷贝函数实现(strcpy和memstrcpy)
memstrcpy 与 strcpy的实现
memstrcpy是实现任意的拷贝,字符串、字符数组、整型、结构体、类等
strcpy是实现字符串拷贝
注意:在实现strcpy时,记得断言不为NULL,保存目的string(strDest)的首地址可有可无,在while内的判断条件注意是 = 不是==,判断结束标志位!= ‘\0’,返回值是目的字符串地址。
在实现memstrcpy时,判断是否为NULL,如果返回值为void*时,注意在主函数中先调用函数,再输出,否则输出的中值是未拷贝的值,输出随机值。如果是char*,已经确定函数的返回值类型,以及参数类型,则不需要强转类型以及调用与输出可以放在同一行。
代码1-1,1-2如下:
#include<iostream>
#include<cassert>
using namespace std;
char* strcpy_1(char* strDest,const char* strSrc)
{
assert((strDest!= NULL) && (strSrc != NULL));
while ((*strDest++ = *strSrc++) != '\0')
{
}
return strDest;
}
int main()
{
char* string1 = "string1";
char a[30];
strcpy_1(a, string1);
cout <<a<< endl;
return 0;
}
#include<iostream>
#include<cassert>
using namespace std;
char* strcpy_1(char* strDest,const char* strSrc)
{
assert((strDest!= NULL) && (strSrc != NULL));
char* res = strDest;
while ((*strDest++ = *strSrc++) != '\0')
{
}
return res;
}
int main()
{
char* string1 = "string1";
char a[30];
cout <<strcpy_1(a, string1)<< endl;
return 0;
}
代码2-1和代码2-2:
#include<iostream>
using namespace std;
//char* memstrcpy(char* strDest, const char* strSrc,int size)
void* memstrcpy(void* strDest, const void* strSrc,int size)
{
if ((strDest == NULL )|| (strSrc == NULL))
return NULL;
char* res = (char*) strDest;
char* src = (char*) strSrc;
while (size-- > 0)
{
*res++ = *src++;
}
return strDest;
}
int main()
{
char a[30];
char* string1 = "myteacher2";
int size = 11;
memstrcpy(a, string1, size);
//memstrcpy(a, "myteacher2", 11);上面三句可这样替换
cout << a << endl;
return 0;
}
#include<iostream>
using namespace std;
char* memstrcpy(char* strDest, const char* strSrc,int size)
{
if ((strDest == NULL )|| (strSrc == NULL))
return NULL;
while (size-- > 0)
{
*strDest++ = *strSrc++;
}
return strDest;
}
int main()
{
char a[30];
memstrcpy(a, "myteacher2", 11);
cout << a << endl;
return 0;
}
结果图: