wmemcmp | Programming Place Plus C言語編 標準ライブラリのリファレンス

C言語編 標準ライブラリのリファレンス wmemcmp

先頭へ戻る

wmemcmp関数

概要 2つのメモリアドレスを起点に、それぞれ指定の文字数分の比較を行う。
ヘッダ wchar.h
形式 wchar_t* wmemcmp(const wchar_t* s1, const wchar_t* s2, size_t size);
引数 s1 比較するメモリの先頭メモリアドレス。
s2 比較するメモリの先頭メモリアドレス。
size 比較する文字数。
戻り値 辞書順で s1 の方が小さければ(前に来れば) 0 より小さい値が、s1 の方が大きければ(後に来れば) 0 より大きい値が、s1 と s2 が同じであれば 0 が返される。
詳細 2つのメモリアドレスを2つの比較範囲の先頭として、それぞれ、引数 size の文字数分だけの比較を行う。
終端文字(L'\0') で終了しない点を除けば、処理内容は wcscmp関数と変わらない。
注意 構造体のメンバ間には、コンパイラによって、パディング(詰め物)が挿入される可能性があるので、構造体変数同士を比較するような目的で、この関数を使用することは間違いである。構造体変数同士の比較は、各メンバを個別に等価演算子で調べるのが正しい。
使用例
#include <stdio.h>
#include <wchar.h>

int main(void)
{
    wchar_t s1[] = L"abc\0de";
    wchar_t s2[] = L"ab\0c";
    wchar_t s3[] = L"abcdef";

    wprintf( L"%d\n", wmemcmp(s1, s1, sizeof(s1)) );
    wprintf( L"%d\n", wmemcmp(s1, s2, sizeof(s1)) );
    wprintf( L"%d\n", wmemcmp(s1, s3, sizeof(s1)) );

    return 0;
}

実行結果:

0
1
-1
関連 適切に終端文字(L'\0') が存在し、途中に登場することも無い、普通のワイド文字列同士の比較であれば、wcscmp関数を使えば良い。
また、各文字をマルチバイト文字とみなして同様の処理を行う memcmp関数が存在する。
解説章


参考リンク



更新履歴

'2018/4/20 全体的に文章を見直し修正。

'2018/2/22 「サイズ」という表記について表現を統一。 型のサイズ(バイト数)を表しているところは「大きさ」、要素数を表しているところは「要素数」。

'2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


はてなブックマーク Pocket に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS