名稱空間
變體
操作

memcmp

來自 cppreference.com
< c‎ | string‎ | byte
定義於標頭檔案 <string.h>
int memcmp( const void* lhs, const void* rhs, size_t count );

比較 lhsrhs 指向物件的首 count 個位元組。比較按字典序進行。

結果的符號是比較物件中第一對不同位元組(均被解釋為 unsigned char)值的差的符號。

如果訪問超出 lhsrhs 指向的任一物件的末尾,則行為未定義。如果 lhsrhs 是空指標,則行為未定義。

目錄

[編輯] 引數

lhs, rhs - 指向要比較的物件的指標
count - 要檢查的位元組數

[編輯] 返回值

如果 lhs 在字典序上出現在 rhs 之前,則返回負值。

如果 lhsrhs 比較相等,或者 count 為零,則返回零。

如果 lhs 在字典序上出現在 rhs 之後,則返回正值。

[編輯] 注意

此函式讀取物件表示,而非物件值,通常僅對位元組陣列有意義:結構體可能有填充位元組,其值是不確定的,聯合體中最後一個儲存成員之後的任何位元組的值是不確定的,並且一種型別可能具有兩個或多個表示相同值的方式(對於 +0-0 或對於 +0.00.0 的不同編碼,型別內不確定的填充位)。

[編輯] 示例

#include <stdio.h>
#include <string.h>
 
void demo(const char* lhs, const char* rhs, size_t sz)
{
    for(size_t n = 0; n < sz; ++n)
        putchar(lhs[n]);
 
    int rc = memcmp(lhs, rhs, sz);
    const char *rel = rc < 0 ? " precedes " : rc > 0 ? " follows " : " compares equal ";
    fputs(rel, stdout);
 
    for(size_t n = 0; n < sz; ++n)
        putchar(rhs[n]);
    puts(" in lexicographical order");
}
 
int main(void)
{
    char a1[] = {'a','b','c'};
    char a2[sizeof a1] = {'a','b','d'};
 
    demo(a1, a2, sizeof a1);
    demo(a2, a1, sizeof a1);
    demo(a1, a1, sizeof a1);
}

輸出

abc precedes abd in lexicographical order
abd follows abc in lexicographical order
abc compares equal to abc in lexicographical order

[編輯] 參考

  • C23 標準 (ISO/IEC 9899:2024)
  • 7.24.4.1 memcmp 函式 (p: TBD)
  • C17 標準 (ISO/IEC 9899:2018)
  • 7.24.4.1 memcmp 函式 (p: 266)
  • C11 標準 (ISO/IEC 9899:2011)
  • 7.24.4.1 memcmp 函式 (p: 365)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.21.4.1 memcmp 函式 (p: 328)
  • C89/C90 標準 (ISO/IEC 9899:1990)
  • 4.11.4.1 memcmp 函式

[編輯] 另請參閱

比較兩個字串
(函式) [編輯]
比較兩個字串的特定數量的字元
(函式) [編輯]
C++ 文件 關於 memcmp