Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

【C言語】memcmp関数とmemicmp関数の違いをわかりやすく解説

C言語には、2つのメモリブロックを比較するための関数として、memcmp()とmemicmp()が用意されています。どちらの関数も、2つのメモリ領域の先頭からnバイトを比較し、その結果を整数値として返します。

memcmp()とmemicmp()の主な違い

  • memcmp():符号なし文字(unsigned char)としてバイト単位の比較を行います。大文字と小文字は厳密に区別されます。

  • memicmp():文字として比較を行いますが、大文字と小文字の違いを無視して比較します(大文字小文字を同一視)。

戻り値の意味

両関数とも、比較結果に応じて以下の整数値を返します。

  • 2つのメモリバッファが等しい場合 → 0 を返す

  • 第1バッファが第2バッファより大きい場合 → 0より大きい値(>0) を返す

  • 第1バッファが第2バッファより小さい場合 → 0より小さい値(<0) を返す

サンプルプログラム

次のプログラムは、memcmp()とmemicmp()の使い方を示したものです。同じ2つの文字列バッファを、それぞれの関数で比較して結果の違いを確認します。

#include<conio.h>
#include<mem.h>
main(){
    char st1[]="This is C Programming language";
    char st2[]="this is c programming";
    int result;
    result=memcmp(st1,st2,strlen(st2));
    printf("\n1. result after comparing buffer using memcmp");
    check(result);
    result=memicmp(st1,st2,strlen(st2));
    printf("\n2. result after comparing buffer using memicmp");
    check(result);
}
check(int x){
    if(x==0)
        printf(" buffer st1 and st2 hold same data\n");
    if(x>0)
        printf("buffer st1 is bigger than buffer st2\n");
    if(x<0)
        printf(" buffer st1 is less than buffer st2\n");
}

実行結果

このプログラムを実行すると、以下の出力が表示されます。

1. result after comparing buffer using memcmp buffer st1 is less than buffer st2
2. result after comparing buffer using memicmp buffer st1 and st2 hold same data

結果の解説

memcmp()では大文字と小文字が区別されるため、st1の先頭が大文字の「T」、st2の先頭が小文字の「t」となり、文字コードの大小関係から「st1はst2より小さい」と判定されます。一方、memicmp()は大文字と小文字を無視して比較するため、両バッファは「同じデータを保持している」と判定されます。

このように、大文字と小文字を区別して厳密に比較したい場合はmemcmp()を、区別せずに比較したい場合はmemicmp()を使い分けるとよいでしょう。

  1. JavaScriptのカスタム関数と組み込み関数の違いをわかりやすく解説

    JavaScriptにおけるカスタム関数とは、開発者自身が目的に合わせて定義・作成する「ユーザー定義関数」のことです。JavaScriptでは、処理内容に応じて独自の関数を自由に記述できます。一方、組み込み関数は、あらかじめJavaScriptライブラリ側で用意されている関数であり、自分で実装しなくてもすぐに呼び出して利用できるのが特徴です。 カスタム関数の基本構文 カスタム関数は、functionキーワードを使って次のように定義します。 <script>    <!--       function functionname

  2. 【C言語】putw()関数とgetw()関数の使い方をわかりやすく解説

    ファイルとは、レコードの集合体であり、データを永続的に保存しておくためのハードディスク上の場所のことです。C言語ではファイルを利用することで、プログラムの実行が終了しても失われないデータを扱えます。ファイルに対する主な操作C言語におけるファイル操作は、基本的に以下の手順で行います。ファイル名を指定する(命名)ファイルを開くファイルから読み込むファイルに書き込むファイルを閉じる基本構文まず、ファイルを扱うためのファイルポインタを宣言します。FILE *ファイルポインタ;宣言例:FILE *fptr;続いて、fopen()関数を使ってファイルを開きます。ファイルポインタ = fopen(ファイル名