memcmp
來自 cppreference.com
定義於標頭檔案 <string.h> |
||
int memcmp( const void* lhs, const void* rhs, size_t count ); |
||
比較 lhs 和 rhs 指向物件的首 count 個位元組。比較按字典序進行。
結果的符號是比較物件中第一對不同位元組(均被解釋為 unsigned char)值的差的符號。
如果訪問超出 lhs 和 rhs 指向的任一物件的末尾,則行為未定義。如果 lhs 或 rhs 是空指標,則行為未定義。
目錄 |
[編輯] 引數
lhs, rhs | - | 指向要比較的物件的指標 |
count | - | 要檢查的位元組數 |
[編輯] 返回值
如果 lhs 在字典序上出現在 rhs 之前,則返回負值。
如果 lhs 和 rhs 比較相等,或者 count 為零,則返回零。
如果 lhs 在字典序上出現在 rhs 之後,則返回正值。
[編輯] 注意
此函式讀取物件表示,而非物件值,通常僅對位元組陣列有意義:結構體可能有填充位元組,其值是不確定的,聯合體中最後一個儲存成員之後的任何位元組的值是不確定的,並且一種型別可能具有兩個或多個表示相同值的方式(對於 +0 和 -0 或對於 +0.0 和 –0.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
|