欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

【C语言】 实现strncpy,strncat,strncmp

来源:本站整理 作者:佚名 时间:2016-05-23 TAG: 我要投稿

//strncpy
 
与strcpy无异,只是拷贝的块大小不一样,strncpy只是向后拷贝n个字节的内容
 
#include
#include
 
char *my_strncpy(char *dest,const char *src,size_t n)
{
 
    char *ret = dest;
    assert(dest);
    assert(src);
    while(n--)   // 用字节数n控制循环的次数
    {
        *dest++ = *src++;
    }
    return dest;
}
 
int main()
{
    char str1[] = "abcdef";
    char str2[10] = {0};
    my_strncpy(str2,str1,3);
    printf("%s\n",str2);
    return 0;
}
 
 
  //strncat
  
与strcat无异,只是追加的块大小不一样,strncat只是向后追加n个字节的内容
 
#include
#include
 
char *my_strncat(char *dest,const char *src,size_t n)
{
    char *ret = dest;
    assert(dest);
    assert(src);
    while(*dest)
    {
        dest++;
    }
    while(n--)
    {
        *dest++ = *src++;
    }
    *dest = '\0';
    return dest;
}
 
int main()
{
    char str1[] = "abcd";
    char str2[] = "efgh";
    my_strncat(str1,str2,3);
    printf("%s\n",str1);
    return 0;
}
 
 
  //strncmp
  
与strcmp无异,只是比较的块大小不一样,strncmp只是向后比较n个字节的内容
 
#include
#include
 
int *my_strncmp(const char *dest,const char *src,size_t n)
{
    int ret = 0;
    assert(dest);
    assert(src);
    while(n--)
    {
        if(!(ret = *(unsigned char *)dest - *(unsigned char *)src))
        {
            dest++;
            src++;
        }
    }
    if(ret
        ret = -1;
    else if(ret > 0)
        ret = 1;
 
    return ret;
}
 
int main()
{
    char str1[] = "abcdef";
    char str2[] = "abcd";
    printf("%d\n",my_strncmp(str1,str2,3));
    return 0;
}
 

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载