strncmp.c
上传用户:shenzhenrh
上传日期:2013-05-12
资源大小:2904k
文件大小:2k
源码类别:

信息检索与抽取

开发平台:

Unix_Linux

  1. /* Copyright (C) 1991, 1996 Free Software Foundation, Inc.
  2.    This file is part of the GNU C Library.
  3.    The GNU C Library is free software; you can redistribute it and/or
  4.    modify it under the terms of the GNU Library General Public License as
  5.    published by the Free Software Foundation; either version 2 of the
  6.    License, or (at your option) any later version.
  7.    The GNU C Library is distributed in the hope that it will be useful,
  8.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  10.    Library General Public License for more details.
  11.    You should have received a copy of the GNU Library General Public
  12.    License along with the GNU C Library; see the file COPYING.LIB.  If not,
  13.    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  14.    Boston, MA 02111-1307, USA.  */
  15. /*
  16.   Include misc.h instead of string.h.  Define reg_char.
  17.   mgd@santafe.edu 1998-08-07
  18. */
  19. #include <misc.h>
  20. #define reg_char char
  21. /* Compare no more than N characters of S1 and S2,
  22.    returning less than, equal to or greater than zero
  23.    if S1 is lexicographically less than, equal to or
  24.    greater than S2.  */
  25. int
  26. strncmp (s1, s2, n)
  27.      const char *s1;
  28.      const char *s2;
  29.      size_t n;
  30. {
  31.   unsigned reg_char c1 = '';
  32.   unsigned reg_char c2 = '';
  33.   if (n >= 4)
  34.     {
  35.       size_t n4 = n >> 2;
  36.       do
  37. {
  38.   c1 = (unsigned char) *s1++;
  39.   c2 = (unsigned char) *s2++;
  40.   if (c1 == '' || c1 != c2)
  41.     return c1 - c2;
  42.   c1 = (unsigned char) *s1++;
  43.   c2 = (unsigned char) *s2++;
  44.   if (c1 == '' || c1 != c2)
  45.     return c1 - c2;
  46.   c1 = (unsigned char) *s1++;
  47.   c2 = (unsigned char) *s2++;
  48.   if (c1 == '' || c1 != c2)
  49.     return c1 - c2;
  50.   c1 = (unsigned char) *s1++;
  51.   c2 = (unsigned char) *s2++;
  52.   if (c1 == '' || c1 != c2)
  53.     return c1 - c2;
  54. } while (--n4 > 0);
  55.       n &= 3;
  56.     }
  57.   while (n > 0)
  58.     {
  59.       c1 = (unsigned char) *s1++;
  60.       c2 = (unsigned char) *s2++;
  61.       if (c1 == '' || c1 != c2)
  62. return c1 - c2;
  63.       n--;
  64.     }
  65.   return c1 - c2;
  66. }