Namespaces
Variants

strncmp

From cppreference.net
< c ‎ | string ‎ | byte
ヘッダーで定義 <string.h>
int strncmp ( const char * lhs, const char * rhs, size_t count ) ;

最大で count 文字の、null終端されている可能性のある2つの配列を比較します。比較は辞書順で行われます。null文字以降の文字は比較されません。

結果の符号は、比較される配列内で異なる最初の文字のペア(両方とも unsigned char として解釈される)の値の差の符号です。

いずれかの配列 lhs または rhs の終端を超えてアクセスが発生した場合、動作は未定義です。 lhs または rhs のいずれかがヌルポインタである場合、動作は未定義です。

目次

パラメータ

lhs, rhs - 比較対象のnull終端配列へのポインタ(null終端の可能性あり)
count - 比較する最大文字数

戻り値

負の値は、 lhs が辞書順で rhs より前に現れる場合を示します。

lhs rhs が等しい場合、またはcountがゼロの場合、ゼロを返します。

lhs rhs より辞書順で後に現れる場合、正の値。

注記

この関数はロケール依存ではなく、 strcoll および strxfrm とは異なります。

#include <stdio.h>
#include <string.h>
void demo(const char* lhs, const char* rhs, int sz)
{
    const int rc = strncmp(lhs, rhs, sz);
    if (rc < 0)
        printf("First %d chars of [%s] precede [%s]\n", sz, lhs, rhs);
    else if (rc > 0)
        printf("First %d chars of [%s] follow [%s]\n", sz, lhs, rhs);
    else
        printf("First %d chars of [%s] equal [%s]\n", sz, lhs, rhs);
}
int main(void)
{
    const char* string = "Hello World!";
    demo(string, "Hello!", 5);
    demo(string, "Hello", 10);
    demo(string, "Hello there", 10);
    demo("Hello, everybody!" + 12, "Hello, somebody!" + 11, 5);
}

出力:

First 5 chars of [Hello World!] equal [Hello!]
First 10 chars of [Hello World!] follow [Hello]
First 10 chars of [Hello World!] precede [Hello there]
First 5 chars of [body!] equal [body!]

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.24.4.4 strncmp関数 (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.24.4.4 strncmp関数 (p: TBD)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.24.4.4 strncmp関数 (p: 366)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.21.4.4 strncmp関数 (p: 329)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.11.4.4 strncmp関数

関連項目

2つの文字列を比較する
(関数)
(C95)
2つのワイド文字列から指定された数の文字を比較する
(関数)
2つのバッファを比較する
(関数)
現在のロケールに従って2つの文字列を比較する
(関数)