第一种:
我的想法是要复印num个字符,就循环num次,每次复印一个字符,并且要将需要打印的个数num与源字符串的长度进行对比,若num比长度小或相等,就将字符挨个复印就行,若num比长度大则要考虑在源字符串所有字符复印之后用'\0'来赋值。
char* my_strncpy(char* dest, char* src, int num)
{
assert(dest && src);
char* ret = dest;
int len = strlen(src);
for (int i = 0; i < num; i++)
{
if (i <= len)
{
*dest++ = *src++;
}
else
{
*dest = '\0';
dest++;
}
}
return ret;
}
第二种:
这种是库函数的定义,写的非常完美。
char* my_strncpy(char* dest, char* src, int num)
{
char* ret = dest;
while (num && (*dest++ = *src++))
{
num--;
}
if (num)//这一步用来判断num的大小是否大于源字符串长度,若相等或小于,直接跳过循环
{
while (--num)//注意:一定要使用--num,否则会多进行一次循环,导致复印的长度+1
{
*dest++ = '\0';
}
}
return ret;
}