名前空間
変種
操作

strncmp

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

null終端かもしれない2つの配列の最大count文字を比較します。比較は辞書順に行われます。null文字以降の文字は比較されません。

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

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

目次

[編集] パラメータ

lhs, rhs - 比較する、null終端かもしれない配列へのポインタ
count - 比較する最大文字数

[編集] 戻り値

lhsが辞書順でrhsより前にある場合は負の値。

lhsrhsが等しく比較される場合、またはcountがゼロの場合、ゼロ。

lhsが辞書順でrhsより後にある場合は正の値。

[編集] 注意

strcollstrxfrmとは異なり、この関数はロケールに依存しません。

[編集]

#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つの文字列を比較する
(関数) [編集]
2つのワイド文字列から指定された文字数を比較する
(関数) [編集]
2つのバッファを比較する
(関数) [編集]
現在のロケールに従って2つの文字列を比較する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)