受长度限制的string函数
int main(void)
{
char arr1[] = "abcdef";
char arr2[] = "qwertyuiop";
strncpy(arr1, arr2,6);
printf("%s\n",arr1);
return 0;
}
即拷贝六个字符
int main(void)
{
char arr1[100] = { 'a', 'b', 'c', 'd', 'e', 'f', '\0', '\0', 'E', '\0', '\0', 'F' };
char arr2[] = "qwerty";
strncpy(arr1, arr2, 20);
printf("%s\n", arr1);
return 0;
}
由此可以得出结论
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个
模拟实现
#模拟实现
char* my_strncpy(char* dest ,char* src,int sz)
{
assert(dest && src);
char* ret = dest;
int len = strlen(src);
if (len >= sz)//如果sz小于源字符串的长度,则简简单单遍历赋值即可
{
for (int i = 0; i < sz; i++)
{
*dest++ = *src++;
}
*dest = '\0';
}
else//如果sz大于源字符串的长度,那么就凑\0,直到满足sz长度为止.
{
for (int i = 0; i < len; i++)
{
*dest++ = *src++;
}
for (int i = 0; i < sz - len; i++)
{
*dest++ = '\0';
}
}
return ret;
}
int main(void)
{
char arr1[100] = { 'a', 'b', 'c', 'd', 'e', 'f', '\0', 'E', 'E', 'F', 'E', 'E' };
char arr2[] = "qwerty";
my_strncpy(arr1, arr2, 10);
printf("%s\n", arr1);
return 0;
}
如果我们的代码正确,那么此时的'F'
将会也变成'\0'
,而它后面那个'E'
则不会变成'\0'
之前:
之后
:
确实实现了strncpy函数以及其特性的模拟!