strncpy
#include<string.h>
char * strncpy ( char * destination, const char * source, size_t num )
使用说明
从字符串中复制字符
将源的第一个字符数复制到目标。如果在复制 num 个字符之前找到源 C 字符串的末尾(由 null 字符表示),则目标将填充零,直到总共写入 num 个字符为止。
如果源长度超过 num,则不会在目标末尾隐式附加空字符。因此,在这种情况下,不应将目标视为以空结尾的 C 字符串(这样读取它会溢出)。
例如:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[50] = "i love you";
char str2[20] = "do not leave you";
printf("%s\n",strncpy(str1,str2,6));
return 0;
}
模拟实现
char* my_strncpy(char* a, const char* b, size_t num)
{
char* ret = a;
while (num)
{
*a++ = *b++;
num--;
}
return ret;
}
int main()
{
char str1[50] = "i love you";
char str2[20] = "do not leave you";
printf("%s\n",my_strncpy(str1,str2,6));
return 0;
}
strncat
#include<string.h>
char * strncat ( char * destination, const char * source, size_t num )
使用说明
从字符串追加字符
将源的第一个数字字符追加到目标,外加一个终止空字符。
如果源中 C 字符串的长度小于 num,则仅复制终止空字符之前的内容。
例如:
int main()
{
char str1[50] = "i love you ";
char str2[20] = "do not leave you";
printf("%s\n",strncat(str1,str2,30));
return 0;
}
模拟实现
#include<stdio.h>
char* my_strncat(char* a, const char* b, size_t num)
{
char* ret = a;
while (*a)
{
a++;
}
while (num&&*b)
{
*a++ = *b++;
num--;
}
return ret;
}
int main()
{
char str1[50] = "i love you ";
char str2[20] = "do not leave you";
printf("%s\n",strncat(str1,str2,30));
return 0;
}
strncmp
#include<string.h>
int strncmp ( const char * str1, const char * str2, size_t num )
使用说明
比较两个字符串的字符
将 C 字符串 str1 的字符数与 C 字符串 str2 的字符数进行比较。
此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续使用以下对,直到字符不同,直到达到终止的空字符,或者直到两个字符串中的 num 字符匹配,以先发生者为准。
例如:
int main()
{
char str1[50] = "abcd";
char str2[20] = "abbb";
printf("%d\n",strncmp(str1,str2,3));
return 0;
}
模拟实现
#include<stdio.h>
int my_strncmp(const char* a, const char* b, size_t num)
{
while (*a && *b && *a == *b && --num)
{
a++;
b++;
}
return *a - *b;
}
int main()
{
char str1[50] = "abcd";
char str2[20] = "abbb";
printf("%d\n",my_strncmp(str1,str2,3));
return 0;
}