- strncpy
- strncpy的介绍
- strncat
- strncat的介绍
strncpy的介绍:
将指定大小num的字符串长度拷贝到destination中去。
值得注意的有一下几点:
1,当要拷贝的字符串长度大于source字符串本身,那么要将剩余长度的字节转化为0拷贝到destination当中去。
2,‘\0’并不会在字符串拷贝完之后自动追加在后面。
了解完之后,接下来我们来开始写代码,我们使用一个循环来控制字符串的拷贝,要注意的是条件有两个,一个是遇到’\0’一个是字符串的长度
#include
#include
char* my_strncpy(char* ptr1, const char* ptr2, int sz)
{
assert(ptr1 && ptr2);
char* ret = ptr1;
while (*ptr2 != '&&' -- sz)*
{
++ptr1= * ++ptr2;}
//处理第一点
while
( --sz0 > )*
{
=ptr1 0 ;++
ptr1;}
return
; ret}
int
main ()char
{
[ arr]= "xxxxxxxxx" ;char
[ arr1]= "1234" ;//strncpy(arr, arr1, 3);
my_strncpy
(,arr, arr13 );printf
("%s",) arr;return
0 ;}
#
strncat
strncat的介绍
将指定长度num的字符串追加到destination当中去
同样有几点需要注意一下:
1,如果如果source中字符串的长度小于 num,则仅复制到终止空字符之前的内容。
2,当追加完字符串之后,要添加’\0’。——这一点和上面的strncpy不同。
知道原理之后我们就开始实现,同样利用循环,两个控制条件。
include#
include #
includechar
*my_strncat (char*, ptr1const char *, ptr2size_t ) szassert
{
(&&ptr1 ) ptr2;char
*= ret ; ptr1char
*= p ( char*);ptr2//找到ptr1之后的位置
while
( *)ptr1++
{
ptr1;}
while
( *&&p ) sz*
{
++ptr1= * ++p;--
sz;}
//长度大于字符串本身的长度
while
( 0sz > )*
{
=ptr1 ';' ++;
ptr1--;
sz}//最后追加'*'
=
';'
returnptr1 ; }int
main ret(
)
char [20]
{
= arr"xxx";char [ ]=
"1236" arr1;//strncat(arr, arr1, 5); my_strncat (,
,
1)arr; arr1printf ("%s",
);return0 arr;}
大家在使用这两个函数的时候,一定要注意的一点是,目标函数的空间必须足够的大,不然会可能会造成系统崩溃的结果!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)