Разница между stricmp и _stricmp в Visual Studio?

Я могу задать глупый вопрос, но я действительно не могу найти ответ с Google, плюс я все еще начинаю использовать MSVS.

Мне недавно нужно было использовать функции для сравнения двух строк. Чего я не понимаю, так это разницы между 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

Мне интересно, почему …

9

Решение

stricmp это функция POSIX, а не стандартная функция C90. Чтобы избежать конфликта имен, Microsoft не одобряет несоответствующее имя (stricmp) и рекомендует использовать _stricmp вместо. Там нет разницы в функциональности (stricmp это просто псевдоним для _stricmp.)

6

Другие решения

Для многих библиотечных функций, включая все <string.h> функции, подчеркиваемые версии с префиксами являются / были идеей Microsoft о чем-то. Я не помню точно, что.

Версия без подчеркивания является очень переносимой. Код, который использует _stricmp(), _strcpy()и т. д. должны быть как-то обработаны — редактировать, #definedи т. д. — если код будет обработан другим компилятором.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector