模拟实现strcpy:
strcpy(长度不受限制的字符串函数)
char* strcpy(char* destination, const char* source);
•源字符串必须以’\0’结束
•目标空间必须足够大,能够容纳源字符串
•能够将源字符串中的’\0’拷贝到目标空间
•目标空间必须可变
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, char* src)
{
assert(dest && src);
char* ret = dest;
/*while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;*/
/*while (*dest = *src)
{
dest++;
src++;
}*/
while (*dest++ = *src++)
{
;
}
//这里的后置加加,先将源中1第一个字符拷贝到目标中,然后再加加实现了每一个字符的拷贝
//同时将'\0'拷贝到了目标中,同时作为循环的跳出条件
return ret;
}
int main()
{
char arr1[20] = { 0 };//目标空间必须足够大,能够容纳源字符串
char arr2[] = "Hello World";
printf("%s",my_strcpy(arr1, arr2));
return 0;
}
strncpy相较于strcpy更加安全,在使用字符串拷贝函数时,建议使用strncpy
strncpy的模拟实现:
char* my_strncpy(char* dest, char* src, int k)
{
assert(dest && src);
//这里的断言是防止目标和源是空指针
char* ret = dest;
while (k)
{
*dest++ = *src++;
k--;
}
if (*(dest - 1) != '\0')
{
*dest = '\0';
}
return ret;
}
int main()
{
char arr1[20] = { 0 };
char arr2[] = "Hello World";
printf("%s",my_strncpy(arr1, arr2, 3));//这里的3为要拷贝的字符个数
return 0;
}