Diferença de stricmp e stricmp no Visual Studio?

Posso fazer uma pergunta estúpida, mas realmente não consigo encontrar uma resposta com o google plus ainda sou um principiante de usar MSVS.

recentemente preciso de usar funções para fazer a comparação de duas cadeias de caracteres. O que eu não entendo é a diferença de stricmp e _stricmp. Ambos podem ser usados para comparar strings e retornar os mesmos resultados. Fui vê-los.

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 );
}

o resultado mostra que são os mesmos:

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
Pergunto-me porquê...

Author: Jim G., 2012-09-13

2 answers

stricmp é uma função POSIX, e não uma função C90 padrão. Para evitar conflitos de nomes a Microsoft desacreditou o nome não-conforme ({[[0]}) e recomenda o uso de _stricmp em vez disso. Não há diferença na funcionalidade (stricmp é apenas um nome alternativo para _stricmp.)

 11
Author: StarPilot, 2012-09-13 20:40:09

Para muitas funções de biblioteca, incluindo todas as funções <string.h>, as versões pré-prefixadas do underscore são / eram a ideia de algo da Microsoft. Não me lembro exactamente o quê.

A versão não sublinhada é altamente portátil. Código que utiliza _stricmp(), _strcpy(), etc. deve ser tratado de alguma forma-edit, #defined, etc.- se o código for processado por outro compilador.

 5
Author: wallyk, 2012-09-13 20:35:05