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;
}