下面介绍的这几个函数相比简单的字符串操作函数不同的是,它们所操作的字符串的长度有一定的限制,具体如下:
1.模拟实现strncpy
#include<stdio.h>
#include<assert.h>
char *strncpy(char *dest,char *src,size_t num)
{
char *ret = dest;
assert(dest && src);
while(num--)
{
*ret++ = *src++;
}
*ret = 0;
return ret;
}
int main()
{
char s1[]= "abcdef";
char s2[] = {0};
strncpy(s2, s1, 3);
printf("%s\n",s2);
return 0;
}
2.模拟实现strncat
#include<stdio.h>
#include<assert.h>
char *strncat(char *dest,char *src,size_t num)
{
char *ret = dest;
assert(dest && src);
while(*ret)
{
ret++;
}
while(num--)
{
*ret++ = *src++;
}
*ret = 0;
return ret;
}
int main()
{
char s1[]= "abcdef";
char s2[] = "hi";
strncat(s2, s1,3);
printf("%s\n",s2);
return 0;
}
3.模拟实现strncmp
#include<stdio.h>
#include<assert.h>
int strncmp(const char *str1,const char *str2,size_t num)
{
assert(str1 && str2);
while(num--)
{
if (*str1 == *str2)
{
str1++;
str2++;
}
else
{
if ((*str1-*str2)<0)
return -1;
else
return 1;
}
}
return 0;
}
int main()
{
char s1[]= "abcdefg";
char s2[] = "abcdlmn";
int ret = strncmp(s1, s2, 5);
printf("%d\n",ret);
return 0;
}
str1 > str2
时的输出 “1” ;
str1 < str2
时的输出 “-1” ;
str1 = str2
时的输出 “0” 。