Share via


_StrCmp( ) API Library Routine

Compares each byte in two null-terminated strings, starting with the leftmost byte.

int _StrCmp(char FAR *string1, char FAR *string2)
char FAR *string1;         /* First comparison string. */
char FAR *string2;         /* Second comparison string. */

Remarks

_StrCmp( ) returns 0 if string1 and string2 match, a positive number if the first unmatched byte in string1 is greater than the corresponding byte in string2, or a negative number if the first unmatched byte in string1 is less than the corresponding byte in string2.

For more information on how to create an API library and integrate it with Visual FoxPro, see Accessing the Visual FoxPro API.

Example

The following example uses _StrCmp( ) to compare two strings passed as parameters.

Visual FoxPro Code

SET LIBRARY TO STRCMP  
? STRCMP("Hello, world.", "Hello, world.")  && matches; returns 0
? STRCMP("Hello, world.", "Hello, wurld.")  && no match; returns non-0

C Code

#include <pro_ext.h>

void NullTerminate(Value FAR *cVal)
{
   if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1))
   {
      _Error(182); // "Insufficient memory"
   }
   ((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';
}

FAR Example(ParamBlk FAR *parm)
{
   int RetValue;

   NullTerminate(&parm->p[0].val);
   NullTerminate(&parm->p[1].val);

   _HLock(parm->p[0].val.ev_handle);
   _HLock(parm->p[1].val.ev_handle);

   RetValue = _StrCmp(_HandToPtr(parm->p[0].val.ev_handle),
      _HandToPtr(parm->p[1].val.ev_handle));

   _RetInt(RetValue, 10); // does return control here

   _HUnLock(parm->p[0].val.ev_handle);
   _HUnLock(parm->p[1].val.ev_handle);
}

FoxInfo myFoxInfo[] = {
   {"STRCMP", (FPFI) Example, 2, "C,C"},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

See Also

_StrCpy( ) API Library Routine | _StrLen( ) API Library Routine | _PutStr( ) API Library Routine | _WPutStr( ) API Library Routine | _SetHandSize( ) API Library Routine | String Manipulation Routines