strncmp
From cppreference.com
| ヘッダー <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より前にある場合は負の値。
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つの文字列を比較する (関数) | |
| C++ ドキュメント (strncmp)
| |