C/C++ memcmp 用法與範例

本篇 ShengYu 介紹 C/C++ memcmp 用法與範例,memcmp 是用來判斷兩段記憶體區塊內容是否相同的函式,以下介紹如何使用 memcmp 函式。

C/C++ 要判斷 c-style 字串是否相等可以使用 memcmp,要使用 memcmp 的話需要引入的標頭檔 <string.h>,如果要使用 C++ 的標頭檔則是引入 <cstring>
memcmp 函式原型為

1
int memcmp(const char * ptr1, const char * ptr2, size_t num);

memcmp() 如果判斷兩段記憶體區塊內容相同的話會回傳 0,這必須牢記因為很容易混搖,很多程式 bug 就是這樣產生的,所以 if (memcmp(buffer1, buffer2, sizeof(buffer1)) printf("not equal\n"); 這樣寫的話結果會是 not equal 唷!來看看下面的 memcmp 用法範例吧!

cpp-memcmp.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// g++ cpp-memcmp.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
char buffer1[] = "abcde";
char buffer2[] = "abcde";

int ret = memcmp(buffer1, buffer2, sizeof(buffer1));
if (ret > 0) {
printf("buffer1 is greater than buffer2\n");
} else if (ret < 0) {
printf("buffer1 is less than buffer2\n");
} else { // ret == 0
printf("buffer1 is equal to buffer2\n");
}

return 0;
}

結果如下,

1
buffer1 is equal to buffer2

再來看看兩段記憶體區塊不相同的例子,memcmp 是大小寫都判斷不同的,

cpp-memcmp2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// g++ cpp-memcmp2.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
char buffer1[] = "abcde";
char buffer2[] = "ABCDE";

int ret = memcmp(buffer1, buffer2, sizeof(buffer1));
if (ret > 0) {
printf("buffer1 is greater than buffer2\n");
} else if (ret < 0) {
printf("buffer1 is less than buffer2\n");
} else { // ret == 0
printf("buffer1 is equal to buffer2\n");
}

return 0;
}

結果如下,

1
buffer1 is greater than buffer2

再來判斷兩段記憶體區塊前 n 個內容是否相等,以下範例是判斷兩段記憶體區塊前 3 個字元是否相同,

cpp-memcmp3.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// g++ cpp-memcmp3.cpp -o a.out
#include <stdio.h>
#include <string.h>

int main() {
char buffer1[] = "abcde";
char buffer2[] = "abcDE";

int ret = memcmp(buffer1, buffer2, 3);
if (ret > 0) {
printf("buffer1 is greater than buffer2\n");
} else if (ret < 0) {
printf("buffer1 is less than buffer2\n");
} else { // ret == 0
printf("buffer1 is equal to buffer2\n");
}

return 0;
}

結果如下,

1
buffer1 is equal to buffer2

以上就是 C/C++ memcmp 的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它參考
memcmp - C++ Reference
https://www.cplusplus.com/reference/cstring/memcmp/

其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ 字串比較的3種方法
C/C++ strcmp 用法與範例
C/C++ memcpy 用法與範例
C/C++ memset 用法與範例