1.strncmp
函数原型:char*strncmp(char*str1, const char *str2, size_t n)
函数功能:strncpy用来比较str1和str2字符串的前n个字符。如果两个字符串相等,strncmp返回0。
strncmp()函数比较指定size个字符,如果字符串str1和str2的前size个字符相同,函数返回0;
字符串比较的大小是由ASCII码表上的顺序决定,这个顺序也是字符值。
strncmp()首先将str1的第一个字符值减去str2的第一个字符值,
若差值为0,则继续比较下一个字符,直到遇到字符结束标志'\0', 若差值不为0,则将差值返回。
注意:要比较的字符串包括'\0', 一旦遇到'\0'结束比较,无论n为多少,不再继续比较。
例如"Ac"和"ba"比较会返回字符"A(65)"和"b(98)"的差值( - 33)。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char my_strncmp(const char*str1, const char*str2, int count)
{
assert(str1 != NULL);
assert(str2 != NULL);
while (*str1 == *str2)
{
if ((*str1 == '\0') || (*str2 == '\0'))
return 0;
str1++;
str2++;
count--;
}
if (*str1>*str2)
return 1;
else if (*str1 < *str2)
return -1;
else
return 0;
}
int main(void)
{
int ret = 0;
char arr1[] = "Ac";
char arr2[] = "ba";
ret = my_strncmp(arr1, arr2, 4);
printf("%d\n", ret);
system("pause");
return 0;
}
2.strncat
函数原型:char*strncat(char*dest, const char*src, size_t n)
函数功能:把src的前n个字符添加到dest 所指的字符串的结尾处,
并覆盖dest所指字符串的'\0', 从而实现字符串的链接。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char*my_strncat(char*dest, char*src, size_t num)
{
assert(dest != NULL);
assert(src != NULL);
char*ret = dest;
while (*dest)
{
dest++;
}
while (num&&*src)
{
*dest++ = *src++;
}
*dest = '\0';
return ret;
}
int main(void)
{
char p[100] = "hello";
char q[] = " world";
int ret = 0;
ret = my_strncat(p, q, 20);
printf("%s\n", ret);
system("pause");
return 0;
}
3.strncpy
函数原型:char *strncmp(char*dest, char*src, size_t n)
函数功能:
(1)复制字符串src中的内容(字符,数字,汉字等)到字符串dest中,复制多少由size_t的值决定。
(2)如果src的前n个字符不含NULL字符,则结果不会以NULL字符结束,
(3)如果src>n, 只将src的前n个字符复制到dest中,不自动添加'\0', 也就是说dest中没有'\0',
需要手动添加'\0'.
(4)如果src<n,则以NULL填充到dest中直到复制完n个字节。
注意:src和dest所指的区域不能重叠,而且dest必须要有足够的空间来容纳src的字符 + '\0'
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char*my_strncpy(char*dest, const char*src, size_t num)
{
assert(dest != NULL);
assert(src != NULL);
while (num && (*dest++ = *src++))
{
num--;
}
if (num > 0)
{
while (num--)
{
*dest = '\0';
}
}
return dest;
}
int main(void)
{
char arr1[20];
char p = "abcdef";
my_strncpy(arr1, p, 10);
printf("%s\n", arr1);
system("pause");
return 0;
}