C言語,memcmp()関数でメモリ領域を比較する

スポンサーリンク

鍛錬 748

C言語,memcmp()関数でメモリ領域を比較する

メモリ領域のデータを比較するには、memcmp()関数を使用します。
 
以下は、memcmp()関数についてです。

#include <string.h>

int memcmp(const void *s1, const void *s2, size_t n);
 

引数

以下は、上記の引数についてです。

引数 意味
const void *s1 比較するメモリ領域 (1つ目)
const void *s2 比較するメモリ領域 (2つ目)
size_t n 比較するバイト数

戻り値

以下は、戻り値についてです。

戻り値
int 指定したバイト数の内、s1 と s2 が等しい場合 0
int 指定したバイト数の内、s1 > s2 の場合 正の整数
int 指定したバイト数の内、s1 < s2 の場合 負の整数
 
スポンサーリンク

プログラム

以下は、メモリ領域を比較するプログラム、test_memcmp.c です。

今回は、メモリ領域の文字列「AABBCC」と文字列「AAYYCC」を比較しています。

1回目の比較では、先頭から2バイトを比較しています。

1回目の比較
AABBCC
AAYYCC

2回目の比較では、4バイト目から2バイトを比較しています。

2回目の比較
AABBCC
AAYYCC
// include
#include <stdio.h>
#include <string.h>

// main
int main(void)
{
	char str1[256] = "";
	char str2[256] = "";
	int ret;
	
	strncpy(str1, "AABBCC", sizeof(str1) - 1);
	strncpy(str2, "AAYYCC", sizeof(str2) - 1);
	
	printf("\n");
	printf(" 123456\n");
	printf(" ||\n");
	
	// 先頭から2バイトを比較
	ret = memcmp(str1, str2, 2);
	if (ret == 0) {
		printf("[%s]\n[%s]\n先頭から2バイトは等しい\n", str1, str2);
	}
	else {
		printf("[%s]\n[%s]\n先頭から2バイトは等しくない\n", str1, str2);
	}
	
	printf("\n");
	printf(" 123456\n");
	printf("    ||\n");
	
	// 4バイト目から2バイトを比較
	ret = memcmp(&str1[3], &str2[3], 2);
	if (ret == 0) {
		printf("[%s]\n[%s]\n4バイト目から2バイトは等しい\n", str1, str2);
	}
	else {
		printf("[%s]\n[%s]\n4バイト目から2バイトは等しくない\n", str1, str2);
	}
	
	return 0;
}

実行結果

以下は、プログラム test_memcmp.c を実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra test_memcmp.c -o test_memcmp
***@ubuntu:~/***/test/c$ ./test_memcmp

 123456
 ||
[AABBCC]
[AAYYCC]
先頭から2バイトは等しい

 123456
    ||
[AABBCC]
[AAYYCC]
4バイト目から2バイトは等しくない

 
上記に示した通り、メモリ領域を比較することができました。

スポンサーリンク

シェアする

フォローする