关于strncpy函数的介绍
Copy characters from string 将源的第一个字符数复制到目标。如果在复制 num 个字符之前找到源 C
字符串的末尾(由 null 字符表示),则目标将填充零,直到总共写入 num 个字符为止。 如果源长度超过
num,则不会在目标末尾隐式附加空字符。因此,在这种情况下,不应将目标视为以空结尾的 C 字符串(这样读取它会溢出)。
函数的参数
//size_t
char * strncpy ( char * destination, const char * source, size_t num );
函数的返回值
destination 目的地 is returned. 被返回。
C语言模拟实现
思路:和strcpy的模拟思路类似,考虑俩个条件(‘\0’,和num是否为零)然后复制字符串,最后注意dest是否是’\0’,不是就补上
char* My_strncpy(char* dest, const char* sou, size_t num)
{
assert(dest || sou);
char* begin = dest;//定义变量记录目的地的初始地址用力返回
while (num > 0 && *sou != '\0' )
{
*dest++ = *sou++;
num--;
}
while (num) //这里考虑若sou复制到dest但dest不是'\0'结束
{
*dest = '\0';
num--;
}
return begin;
}
关于strncat函数介绍
将源的第一个数字字符追加到目标,外加一个终止空字符。 如果源中 C 字符串的长度小于 num,则仅复制终止空字符之前的内容.
函数的参数
char * strncat ( char * destination, const char * source, size_t num );
函数的返回值
destination 目的地 is returned. 被返回。
C语言模拟实现
思路:原理类似strncpy,只是从原有的字符上再进行拷贝
char* My_strncat(char* dest, const char* sou, size_t n)
{
assert(dest&& sou);
char* ptr = dest;
while (*dest != '\0')
{
dest++;
}
while (n > 0 && *sou != '\0')
{
*dest++ = *sou++;
n--;
}
while(n)
{
*dest++ = '\0';
}
return ptr;
}