Difference of stricmp and _stricmp in Visual Studio?
Solution 1
stricmp
is a POSIX function, and not a standard C90 function. To avoid name clashes Microsoft deprecated the non-conforming name (stricmp
) and recommends using _stricmp
instead. There is no difference in functionality (stricmp
is merely an alias for _stricmp
.)
Solution 2
For many library functions, including all the <string.h>
functions, the underscore prefixed versions are/were Microsoft's idea of something. I don't recall exactly what.
The non-underscored version is highly portable. Code which uses _stricmp()
, _strcpy()
, etc. must be handled somehow—edit, #defined
, etc.—if the code will be processed by another compiler.
FortCpp
I am a Physics PhD in Theoretical and computational physics. Programs in Fortran and C++. Likes OOP and High Performance computing. I am self teaching more knowledge and writing a First-Principle calculation software in OOP using Fortran 2003.
Updated on September 14, 2020Comments
-
FortCpp almost 4 years
I may asking a stupid question, but I really can't find an answer with google plus I am still a beginner of using MSVS.
I recently need to use functions to make comparison of two strings. What I don't understand is the difference of stricmp and _stricmp. They both can be used to compare strings and return the same results. I went to check them:
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 ); }
result shows they are the same:
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
I am wondering why...