一、strncpy的注意事项
二、strncpy的模拟实现
一、strncpy的注意事项
1、头文件为<string.h>
2、声明为char* strncpy(char* dest, const char* src, size_t num);
3、num大于src的长度时,剩余部分用拷贝'\0'
4、num小于src的长度时,不会为dest附加上'\0'。
5、num大于dest的长度时,会越界进行拷贝
6、会返回dest的初始地址
二、strncpy的模拟实现
#include <stdio.h>
#include <assert.h>
char* my_strncpy(char* dest, const char* src, size_t num)
{
assert(dest && src);//用断言判断dest和src是否为空指针
char* start = dest;//保存dest的初始地址
while (num && (*dest++ = *src++))//判断num是否为0,并且判断src是否结束
{
num--;
}
if (num)//判断num是否为0
{
while (--num)//处理了src第num个字符为'\0'的情况(从1开始算)
{
*dest++ = '\0';//超出src的部分给dest拷贝上'\0'
}
}
return start;//返回dest的初始地址
}
int main()
{
char arr1[7] = "*";
char arr2[] = "abcdef";
printf("%s\n", my_strncpy(arr1, arr2, 6));
return 0;
}
附:若有不足,望指出
^-^感谢阅读^-^