tags:

views:

1696

answers:

2

I am trying to compile the following very very simple piece of source code:

#include <cstring>
// #include <string.h>
// using namespace std;

class Helper {
public:
    int cStringsAreEqual(const char *s1, const char *s2) {
        return stricmp(s1, s2);
    }
};

... but I am getting the following error message:

   g++ error: ‘stricmp’ was not declared in this scope

However when I use strcmp() instead of stricmp() then everything is fine!

What can be wrong here? Shouldn't stricmp() be allowed when strcmp() is allowed?

Sureley, this all could be written in a much better way without using strcmp/stricmp.

But that's not the point here.

I am porting a piece of software - which makes much use of calls to stricmp(). And if somehow possible I would like to avoid all of the efforts needed to change every call to stricmp.

Any help on this would be very much appreciated!

BTW: I am using Ubuntu karmic OS (v9.10) with g++ v4.4.1.

BTW: as you can see I also made some trials with '#include string.h' or with 'namespace std' but nothing helped.

+5  A: 

stricmp is neither POSIX nor ANSI, so it doesn't really matter if strcmp is allowed, if your compiler or standard library is strictly adhering to POSIX or ANSI standard library functions (as is probably the case with the GCC suite).

Mark Rushakoff
is there a POSIX/ANSI alternative with the same semantics?
It's complicated, because the idea of "case-sensitivity" can depend on your locale or OS. See some of the answers in this question: http://stackoverflow.com/questions/11635/case-insensitive-string-comparison-in-c
Mark Rushakoff
+9  A: 

Try strcasecmp(). Here's the manual page for it. It is conforming to 4.4BSD and POSIX.1-2001.

Gonzalo
That would be an option. strcasecmp() seems to have the same parameters. So it shouldn't be to difficult to create a small perl script that does a global change. Thanks a lot!
No problem. Also take a look at Mark Rushakoff's comment on how the locale settings affect this function.
Gonzalo