九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
memcmp與strcmp函數(shù)

memcmp與strcmp函數(shù)

C++ 2009-09-16 09:09:13 閱讀633 評論0   字號: 訂閱

一、memcmp含義

Compare characters in two buffers.

int memcmp(    const void* buf1,    const void* buf2,    size_t count );inline int wmemcmp (   const  wchar_t* buf1, const wchar_t* buf2, size_t count);

Parameters

       buf1    :  First buffer.
       buf2    :  Second buffer.
       count   : Number of characters.
       Return Values   : The return value indicates the relationship between the buffers.

       Return Value Relationship of First count Bytes of buf1 and buf2
        < 0         buf1 less than buf2
        0         buf1 identical to buf2

> 0

buf1 greater than buf2

 二、memcmp與strcmp的區(qū)別

int   memcmp(const   void   *   cs,const   void   *   ct,size_t   count)  
  {  

  const   unsigned   char   *su1,   *su2;  
  int   res   =   0;  
   
  for(   su1   =   cs,   su2   =   ct;   0   <   count;   ++su1,   ++su2,   count--)  
  if   ((res   =   *su1   -   *su2)   !=   0)  
  break;  
  return   res;  
 }  
   
  int   strncmp(const   char   *   cs,const   char   *   ct,size_t   count)  
  {  
  register   signed   char   __res   =   0;       
  while   (count)   {  
  if   ((__res   =   *cs   -   *ct++)   !=   0   ||   !*cs++)  
  break;  
  count--;  
  }      
  return   __res;  
  }

1、這兩個函數(shù)的差別其實還是挺大的,差別在這里:     
  對于memcmp(),如果兩個字符串相同而且count大于字符串長度的話,memcmp不會在\0處停下來,會繼續(xù)比較\0后面的內(nèi)存單元,直到_res不為零或者達到count次數(shù)。      
  對于strncmp(),由于((__res   =   *cs   -   *ct++)   !=   0   ||   !*cs++)的存在,比較必定會在最短的字符串的末尾停下來,即使count還未為零。具體的例子:      
  char   a1[]="ABCD";  
  char   a2[]="ABCD";       
  對于memcmp(a1,a2,10),memcmp在兩個字符串的\0之后繼續(xù)比較  
  對于strncmp(a1,a2,10),strncmp在兩個字符串的末尾停下,不再繼續(xù)比較。       
  所以,如果想使用memcmp比較字符串,要保證count不能超過最短字符串的長度,否則結(jié)果有可能是錯誤的。

2、strncmp("abcd",   "abcdef",   6)   =   0。比較次數(shù)是一樣的:   
   memcmp:在比較到第5個字符也就是'\0',*su1   -   *su2的結(jié)果顯然不等于0,所以滿足條件跳出循環(huán),不會再進行后面的比較。我想在其他情況下也一樣。   
   strncmp:同樣的道理再比較到第5個字符時結(jié)束循環(huán),其實strncmp中“!*cs++”完全等同于“!*ct++”,其作用僅在于當兩個字符串相同的情形下,防止多余的比較次數(shù)。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
字符串比較函數(shù) strcmp,strncmp 源碼
strcmp 函數(shù)的實現(xiàn)
C++:strcmp與strncmp的比較(轉(zhuǎn))
[示例詳解]C++常用字符串處理函數(shù)及使用
c語言串比較函數(shù)
Nginx源碼學習(2)
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服