int strcmp(const char *s1, const char *s2)
{
int ret = 0;
while (!(ret = *(unsigned char *) s1 - *(unsigned char *) s2) && *s2) ++s1, ++s2;
if (ret < 0)
ret = -1;
else if (ret > 0)
ret = 1 ;
return ret;
}
私はからコードを確認します。 strlen(s2)>strlen(s1)
の場合は、++s1
がこの範囲外になることがあります。残念なことに、関数はエラーを返します。Cのstrcmpのソースコード
あなたのリンクのコードでわかる小さな問題の1つは、strcmpとstrncmpが異なる結果を返すことです。 strcmpは結果を-1 .. + 1の範囲に不必要にクランプし、strncmpは完全な差を返します。 – kusma