【面试题】C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别

原创 2016年05月30日 17:15:53

    模拟实现内存比较函数memcmp:


    该函数与strcmp有相似之处,都可用于字符串比较是否相同,若相同,则返回0值。若前者大于后者,则返回大于0的整型值,否则返回小于0的整型值。


    区别在于:


    strcmp只能比较字符串,memcmp是内存比较函数,原则上是比较内存的,但其实真正实现时并不是所有都可以比较,例如float,但我们至少可以比较字符串以及int型。

    而对于strcmp,strncmp的比较:str1, str2 为需要比较的两个字符串,n为要比较的字符的数目,而函数strcmp()做不到,strcmp()可以比较全部字符串(因为它找字符串结束标志‘\0’)。


    关于strcmp的实现,可以查看我的博客http://10740184.blog.51cto.com/10730184/1714512


    关于strncmp的实现,可以查看我的博客http://10740184.blog.51cto.com/10730184/1715207

    代码如下:


    

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

int my_memcmp(const void *p1, const void *p2, size_t count)
{
    assert(p1);
    assert(p2);
    char *dest = (char *)p1;
    char *src = (char *)p2;
    
    while (count && *dest == *src)
    {
        count--;
        dest++;
        src++;
    }
    if (count == 0)
    {
        return 0;
    }    
    else
    {
         return *dest  - *src - ‘\0’;
    }
       
}



int main()
{
    /*int arr1[] = { 1, 3, 20, 5 };            //比较整型
    int arr2[] = { 1, 3, 10, 7 };*/
    char arr1[] = "hello";                    //比较字符串
    char arr2[] = "hello world";
    int len = sizeof(arr1) / sizeof(arr1[0]);
    int ret = my_memcmp(arr1, arr2, 12);
    printf("%d", ret);
    system("pause");
    return 0;
}


本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1715695

memcpy与strcpy区别,memcmp与strcmp的区别

memcpy c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。 中文名 内存拷贝函数 外文名 me...
  • qq_31108501
  • qq_31108501
  • 2016年07月15日 19:45
  • 2638

memcmp函数实现——string.h库函数

函数实现:信息来自RHEL,man page:MEMCMP(3) Linux Programmer's Manual MEMCMP(3...
  • Riyadh_linux
  • Riyadh_linux
  • 2015年12月07日 21:48
  • 1234

C语言之memcmp函数

【FROM MSDN && 百科】 原型:  int memcmp(const void *buf1, const void *buf2, unsigned int count); #in...
  • hgj125073
  • hgj125073
  • 2013年01月06日 10:35
  • 4825

memcmp比较两个struct是否相等

struct MyStruct { char a; int b; }; MyStruct A, B; memcmp(&A, &B, sizeof(MyStruct));A和B是否可以通...
  • peng314899581
  • peng314899581
  • 2017年03月07日 16:04
  • 913

strstr和memcmp函数的实现

#include #include //malloc()函数 typedef unsigned int size_t; size_t my_strlen(const char * str) ...
  • lwj103862095
  • lwj103862095
  • 2013年10月10日 11:10
  • 3731

一些常用的字符串处理函数总结memcpy、memmove、memset、memcmp、memchr等

(1)原型void *memcpy(void *dest, const void *src, size_t n);  字符串复制函数,从内存区域src拷贝n个字节到dest,必须确保src和dest是...
  • u012088914
  • u012088914
  • 2016年03月06日 23:48
  • 827

字符串函数---strcmp()与strncmp()详解及实现

一、strcmp()与strncmp()        strcmp():strcmp(s1,s2);            比较两个字符串。        strncmp():strnc...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2014年10月06日 16:56
  • 4170

C语言学习之字符串、字符和字节第三讲

1.错误信息         1.1函数原型:char *strerror( int  error_number );             函数功能:当你调用一些函数时,请求操作系统执行一些功...
  • u014659915
  • u014659915
  • 2016年01月13日 14:33
  • 123

strcmp,strncmp函数实现——string.h库函数

信息来自RHEL,man page: STRCMP(3) Linux Programmer's Manual ...
  • Riyadh_linux
  • Riyadh_linux
  • 2015年11月24日 23:37
  • 1339

memcmp之优化

原文地址::http://blog.chinaunix.net/uid-25627207-id-3556923.html 前段时间在公司移植一个工具的时候,历经千辛万难,终于把工具移...
  • xqhrs232
  • xqhrs232
  • 2013年04月01日 16:24
  • 940
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【面试题】C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别
举报原因:
原因补充:

(最多只允许输入30个字)