Intereting Posts
Отображать изображение во втором streamе, OpenCV? Использование GLUT для простого вывода текста c ++ array zero-initialization: Это ошибка, или это правильно? Асинхронные вызовы функций в Qt C ++ вставка unique_ptr в карту Обходной путь для ошибки C2536: нельзя указать явный инициализатор для массивов в Visual Studio 2013 Почему стандартным контейнерам требуется тип allocator_type :: value_type для типа элемента? Почему код C ++ без формального имени аргумента в определении функции компилируется без предупреждений? Каково определение «переменной»? Как заставить телефон вибрировать от Qt Android Поворот и перевод объекта в локальной и глобальной ориентации с использованием glm Как заголовочный файл C ++ включает реализацию? Как узнать, когда и какие файлы были изменены в файловой системе Windows с помощью winapi Такое же имя classа в разных файлах C ++ Что заставляет Scala перегружать «хороший», но C ++ «плохой»?

Разница 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, "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. Чтобы избежать конфликтов имен, Microsoft stricmp несоответствующее имя ( stricmp ) и рекомендует вместо этого использовать _stricmp . Нет никакой разницы в функциональности ( stricmp – просто псевдоним для _stricmp .)

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

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