I've this assignment to implement strcmp function. Sometimes it runs okay but other times it crashes. Please help me.
#include <iostream>
using namespace std;
int mystrcmp(const char *s1, const char *s2);
int main()
{
cout<<mystrcmp("A","A")<<endl;
cout<<mystrcmp("B","A")<<endl;
cout<<mystrcmp("A","B")<<endl;
cout<<mystrcmp("AB","A")<<endl;
return 0;
}
int mystrcmp(const char *s1, const char *s2)
{
while (*s1==*s2)
{
s1++;
s2++;
}
if(*s1=='\0')
return(0);
return(*s1-*s2);
}
It will crash if both the input are identical, because your loop continues beyond the terminating nul
character.
To fix this you must have a check for nul
character inside the loop as:
while (*s1==*s2) {
// if s1 points to nul character, then s2 should also, because of the ==
// which means we've reached the end of the strings and they are equal
// so return 0.
if(*s1=='\0')
return 0;
s1++;
s2++;
}
return *s1-*s2;