一.strcpy函数
char* strcpy(char* destination,const char* source)
char* dest 目标字符串 char* src 源字符串
库中实现的strcpy
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "Sample string";
char str2[40];
char str3[40];
strcpy(str2, str1);
strcpy(str3, "copy successful");
printf("str1: %s\nstr2: %s\nstr3: %s\n", str1, str2, str3);
return 0;
}
模拟实现strcpy
char* My_strcpy(char* dest, const char* src)
{
assert(dest);
assert(src);
char* p = dest;
while (*dest = *src)
{
++dest;
++src;
}
return p;
}
int main()
{
char src[] = "abcdefg";
char zjw[] = "shabi";
char dest[10];
char ppy[17];
My_strcpy(dest, src);
My_strcpy(ppy, zjw);
printf("dest:%s\nppy:%s\n", My_strcpy(dest, src), My_strcpy(ppy, zjw));
system("pause");
return 0;
}
二.strncpy函数
char* strcpy(char* destination,const char* source,size_t num);
char* dest 目标字符串 char* src 源字符串 size_t num 要拷贝的字符个数
库中实现的strncpy
int main ()
{
char str1[]= "To be or not to be";
char str2[40];
char str3[40];
/* copy to sized buffer (overflow safe): */
strncpy ( str2, str1, sizeof(str2) );
/* partial copy (only 5 chars): */
strncpy ( str3, str2, 5 );
str3[5] = '\0'; /* null character manually added */
puts (str1);
puts (str2);
puts (str3);
return 0;
}
模拟实现strncpy
char* My_strncpy(char* dest, const char* src, size_t len)
{
assert(dest);
assert(src);
char* p = dest;
while (len--)
{
if (*dest = *src)
{
++dest;
++src;
}
}
return p;
}
int main()
{
char str1[] = "abc def ppy";
char str2[20];
char str3[26];
int len = strlen(str1) + 1; //要将结尾的'\0'拷贝进去,否则会找不到结尾
printf("str2:%s\n", My_strncpy(str2, str1, len));
str3[3] = '\0'; //此处需要给该字符串一个结束标志
printf("str3:%s\n", My_strncpy(str3, "happy", 3));
system("pause");
return 0;
}