C言語 標準関数 | 応用 | サンプル

標準関数
構文
応用

管理人

プライバシーポリシー


書式

#include <string.h>

int strncmp( const char *str1 , const char *str2
                                       , size_t len );

■戻り値:
str1とstr2が等しいならば0、
str1>str2ならば正の値、
str1<str2ならば負の値を返す。

説明

strcmpと同様にstr1とstr2を比較してその結果を返す。

比較に際してstr1、str2を文字列の先頭アドレスから順次1バイトずつ比較して、等しく無い場合にその1バイトの大小で以って全体の大小を判定するが、本関数strncmpはstrcmpと異なり、NULL(\0)が出現しなくともlenの長さまでの比較で結果を判定するので、信頼出来ないデータに対しては本関数strncmpを使用することを推奨する。

但し、長さlenに至る前にNULLが出現すればstrcmpと同じ動作になる。

サンプル

#include <string.h>

main() {
  int iRet;

  /* 3byteまで同じで3byteまでを比較 str1==str2 */
  iRet = strncmp( "12311x" , "12300" , 3 );
  printf( "iRet=%d\n" , iRet );/* 0 */

  /* 3byteまで同じで4byteまでを比較 str1>str2 */
  iRet = strncmp( "12311x" , "12300" , 4 );
  printf( "iRet=%d\n" , iRet );/* 正の値 */

  /* 3byteまで同じで4byteまでを比較 str1<str2 */
  iRet = strncmp( "12300" , "12311x" , 4 );
  printf( "iRet=%d\n" , iRet );/* 負の値 */

  /* 5byteまで同じで最大比較10byte(len)だが、
                実際は6byte目のNULLまでを比較 str1==str2 */

  iRet = strncmp( "12300" , "12300" , 10 );
  printf( "iRet=%d\n" , iRet );/* 0 */

  /* 5byteまで同じで最大比較10byte(len)だが、
                実際は6byte目のNULLまでを比較 str1>str2 */

  iRet = strncmp( "12300x" , "12300" , 10 );
  printf( "iRet=%d\n" , iRet );/* 正の値 */

  /* 5byteまで同じで最大比較10byte(len)だが、
                実際は6byte目のNULLまでを比較 str1<str2 */

  iRet = strncmp( "12300" , "12300x" , 10 );
  printf( "iRet=%d\n" , iRet );/* 負の値 */
}

実行結果(Linuxの場合)

iRet=0
iRet=1
iRet=-1
iRet=0
iRet=120
iRet=-120

実行結果(Windowsの場合)

iRet=0
iRet=1
iRet=-1
iRet=0
iRet=1
iRet=-1


Copyright © 2008-2015 http://hitorilife.com All Rights Reserved.