Namespaces
Variants

wmemcmp

From cppreference.net
< c ‎ | string ‎ | wide
定义于头文件 <wchar.h>
int wmemcmp ( const wchar_t * lhs, const wchar_t * rhs, size_t count ) ;
(C95 起)

比较由 lhs rhs 所指向的宽字符(或兼容整数类型)数组的前 count 个宽字符。该比较按字典序进行。

结果的符号取决于被比较数组中第一对不同的宽字符值之间的差值符号。

如果 count 为零,该函数不执行任何操作。

目录

参数

lhs, rhs - 指向待比较宽字符数组的指针
count - 待检验的宽字符数量

返回值

若首个不同宽字符的值在 lhs 中小于 rhs 中对应宽字符的值,则返回负值: lhs 在字典序中位于 rhs 之前。

如果 lhs rhs 的所有 count 个宽字符均相等,则返回 0

若第一个不同的宽字符在 lhs 中的值大于 rhs 中对应宽字符的值,则返回正值:按字典序排列时 rhs 位于 lhs 之前。

注释

此函数不区分区域设置,且不关注所检查的 wchar_t 对象的值:空字符及无效宽字符同样会参与比较。

示例

#include <locale.h>
#include <stdio.h>
#include <wchar.h>
void demo(const wchar_t* lhs, const wchar_t* rhs, size_t sz)
{
    for (size_t n = 0; n < sz; ++n)
        putwchar(lhs[n]);
    int rc = wmemcmp(lhs, rhs, sz);
    if (rc == 0)
        wprintf(L" compares equal to ");
    else if(rc < 0)
        wprintf(L" precedes ");
    else if(rc > 0)
        wprintf(L" follows ");
    for (size_t n = 0; n < sz; ++n)
        putwchar(rhs[n]);
    wprintf(L" in lexicographical order\n");
}
int main(void)
{
    setlocale(LC_ALL, "en_US.utf8");
    wchar_t a1[] = {L'α',L'β',L'γ'};
    wchar_t a2[] = {L'α',L'β',L'δ'};
    size_t sz = sizeof a1 / sizeof *a1;
    demo(a1, a2, sz);
    demo(a2, a1, sz);
    demo(a1, a1, sz);
}

输出:

αβγ precedes αβδ in lexicographical order
αβδ follows αβγ in lexicographical order
αβγ compares equal to αβγ in lexicographical order

参考文献

  • C23 标准 (ISO/IEC 9899:2024):
  • 7.29.4.4.5 wmemcmp 函数 (p: TBD)
  • C17 标准 (ISO/IEC 9899:2018):
  • 7.29.4.4.5 wmemcmp 函数 (页: TBD)
  • C11 标准 (ISO/IEC 9899:2011):
  • 7.29.4.4.5 wmemcmp 函数 (p: 435)
  • C99标准(ISO/IEC 9899:1999):
  • 7.24.4.4.5 wmemcmp函数(页码:381)

参考

(C95)
比较两个宽字符串
(函数)
比较两个缓冲区
(函数)
(C95)
比较两个宽字符串中指定数量的字符
(函数)
C++ 文档 关于 wmemcmp