1. ホーム
  2. c++

[解決済み] Visual Studioのstricmpと_stricmpの違い?

2022-02-11 03:11:28

質問

私はMSVSを使い始めたばかりで、ググっても答えが見つからないのです。

最近、2つの文字列を比較するために関数を使用する必要があります。私が理解していないのは、stricmpと_stricmpの違いです。どちらも文字列の比較に使用することができ、同じ結果を返します。私はそれらをチェックしに行きました。

char string1[] = "The quick brown dog jumps over the lazy fox";
char string2[] = "The QUICK brown dog jumps over the lazy fox";

void main( void )
{
   char tmp[20];
   int result;
   /* Case sensitive */
   printf( "Compare strings:\n\t%s\n\t%s\n\n", string1, string2 );
   result = stricmp( string1, string2 );
   if( result > 0 )
      strcpy( tmp, "greater than" );
   else if( result < 0 )
      strcpy( tmp, "less than" );
   else
      strcpy( tmp, "equal to" );
   printf( "\tstricmp:   String 1 is %s string 2\n", tmp );
   /* Case insensitive */
   result = _stricmp( string1, string2 );
   if( result > 0 )
      strcpy( tmp, "greater than" );
   else if( result < 0 )
      strcpy( tmp, "less than" );
   else
      strcpy( tmp, "equal to" );
   printf( "\t_stricmp:  String 1 is %s string 2\n", tmp );
}

の結果、両者は同じであることがわかります。

Compare strings:
    The quick brown dog jumps over the lazy fox
    The QUICK brown dog jumps over the lazy fox

    stricmp:   String 1 is equal to string 2
    _stricmp:  String 1 is equal to string 2

なぜだろう...と考えています。

どのように解決するのですか?

stricmp は POSIX 関数であり、C90 の標準関数ではありません。 名前の衝突を避けるため、マイクロソフトは非適合な名前 ( stricmp )を使用することを推奨しています。 _stricmp ではなく 機能に差はありません( stricmp の単なるエイリアスです。 _stricmp .)