C–六、字符串之strcpy,strncpy
函数原型:
char * strcpy(char* dest, const char *src);
char * strncpy(char *dest, const char *src, int n)
#include <stdio.h>
#include <assert.h>
//1.写法1
char* myStrcpy(char *dest,char *src){
if(dest == NULL || src == NULL){
return NULL;
}
char* bak = dest;
while(*src){
*dest++ = *src++;
}
*dest = '\0';
return bak;
}
//2.写法2
char* myStrcpy1(char *dest,char *src){
//assert断言
assert(dest == NULL || src == NULL);
char* bak = dest;
while(*src){
*dest++ = *src++;
}
*dest = '\0';
return bak;
}
//3.写法3
char* myStrcpy2(char *dest,char *src){
if(dest == NULL || src == NULL){
return NULL;
}
char* bak = dest;
while((*dest++ = *src++) != '\0');//注意符号优先级以及结合顺序
*dest = '\0';
return bak;
}
//strncpy:比strcpy 多一个count-->要复制多少个字符
char* myStrncpy2(char *dest,char *src,int count){
if(dest == NULL || src == NULL){
return NULL;
}
char* bak = dest;
while(*src && count-- > 0){
*dest++ = *src++;
}
if(count > 0){
while(count-- > 0){
*dest = '\0';
}
return bak;
}
*dest = '\0';
return bak;
}
int main()
{
char str[128] = {'\0'};
char *p = "I am handsome";
puts(myStrcpy(str,p));
puts(str);
puts(myStrcpy2(str,p));
puts(myStrncpy2(str,p,10));
return 0;
}