strncpy
strncpy的介绍
strncpy的介绍: 将指定大小num的字符串长度拷贝到destination中去。
值得注意的有一下几点: 1,当要拷贝的字符串长度大于source字符串本身,那么要将剩余长度的字节转化为0拷贝到destination当中去。 2,‘\0’并不会在字符串拷贝完之后自动追加在后面。 了解完之后,接下来我们来开始写代码,我们使用一个循环来控制字符串的拷贝,要注意的是条件有两个,一个是遇到’\0’一个是字符串的长度
#include <assert.h>
#include <stdio.h>
char* my_strncpy(char* ptr1, const char* ptr2, int sz)
{
assert(ptr1 && ptr2);
char* ret = ptr1;
while (*ptr2 != '\0' && sz--)
{
*ptr1++ = *ptr2++;
}
while (sz-- > 0)
{
*ptr1 = 0;
ptr1++;
}
return ret;
}
int main()
{
char arr[] = "xxxxxxxxx";
char arr1[] = "1234";
my_strncpy(arr, arr1, 3);
printf("%s", arr);
return 0;
}
strncat
strncat的介绍
将指定长度num的字符串追加到destination当中去 同样有几点需要注意一下: 1,如果如果source中字符串的长度小于 num,则仅复制到终止空字符之前的内容。 2,当追加完字符串之后,要添加’\0’。——这一点和上面的strncpy不同。 知道原理之后我们就开始实现,同样利用循环,两个控制条件。
#include <string.h>
#include <assert.h>
#include <stdio.h>
char* my_strncat(char* ptr1, const char* ptr2, size_t sz)
{
assert(ptr1 && ptr2);
char* ret = ptr1;
char* p = (char*)ptr2;
while (*ptr1)
{
ptr1++;
}
while (*p && sz)
{
*ptr1++ = *p++;
sz--;
}
while (sz > 0)
{
*ptr1 = '\0';
ptr1++;
sz--;
}
*ptr1 = '\0';
return ret;
}
int main()
{
char arr[20] = "xxx";
char arr1[] = "1236";
my_strncat(arr, arr1, 1);
printf("%s", arr);
return 0;
}
大家在使用这两个函数的时候,一定要注意的一点是,目标函数的空间必须足够的大,不然会可能会造成系统崩溃的结果!
|