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ê...
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
.)
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.