strncpy的介绍
Routine | Required Header | Compatibility |
---|---|---|
strncpy | <string.h> | ANSI, Win 95, Win NT |
函数原型:
char *strncpy( char *strDest, const char *strSource, size_t count );
功能介绍:
strncpy函数将strSource的初始字符复制到strDest并返回strDest的地址,如果count小于或等于strSource的长度,则不会将空字符自动附加到复制的字符串中。如果count大于strSource的长度,则目标字符串将填充长度count以内的空字符。如果源字符串和目标字符串重叠,strncpy的行为是未定义的。
1. count小于等于strsource的长度
#include<stdio.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "hello bit";
strncpy(arr1, arr2, 4);
}
由监视窗口可以看出,当count小于或等于strSource的长度时,不会将空字符自动附加到复制的字符串中。
2.count大于strSource的长度
#include<stdio.h>
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "bit";
strncpy(arr1, arr2, 6);
}
由监视窗口看出,当count大于strSouce长度时,拷贝完源字符串后,在目标字符串的后面追加’\0’ ,直到count个.
strncpy的模拟实现
#include<stdio.h>
char* my_strncpy(char* dest, const char* src,size_t count)
{
char* start = dest; // 记录目标字符串起始位置
while (count && (*dest++ = *src++)) // 拷贝字符串
{
count--;
}
if (count) // 当count大于src的长度时,将补充空字符
{
while (--count)
{
*dest++ = '\0';
}
}
return start;
}
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "bit";
my_strncpy(arr1, arr2, 6);
printf("%s\n", arr1);
}
比较难理解的可能是这段代码:
*dest++ = *src++
将*src的值赋值给 *dest,然后src++,dest++,这样循环下去,直到src指向空字符.