tag:blogger.com,1999:blog-382524739729445649.post3338121552178246759..comments2024-02-23T10:28:53.773+09:00Comments on SGソフトウェア開発ブログ: Cでcompareが-1,0,1を返す理由sgblog60http://www.blogger.com/profile/12455664571932809532noreply@blogger.comBlogger2125tag:blogger.com,1999:blog-382524739729445649.post-80131096810718593382015-07-05T22:25:42.354+09:002015-07-05T22:25:42.354+09:00そうですね。
正確には-1,1ではなく、負数、正数が仕様ですよね。
なんとも、微妙なタイトルになって...そうですね。<br />正確には-1,1ではなく、負数、正数が仕様ですよね。<br />なんとも、微妙なタイトルになってしまいました。。。Ichioka Takehikohttps://www.blogger.com/profile/13065122724529180876noreply@blogger.comtag:blogger.com,1999:blog-382524739729445649.post-49903981310681403392015-07-02T19:12:12.038+09:002015-07-02T19:12:12.038+09:00C(gcc 4.9.2…というか、glibc 2.20)では、strcmpもmemcmpも一致した時...C(gcc 4.9.2…というか、glibc 2.20)では、strcmpもmemcmpも一致した時に0を返し、不一致時は正数か負数を返す、が仕様だと思いますよ。実装にも依ると思いますが、基本1バイトずつ引き算してたんじゃないかな。<br />と思い以下を試しました。<br /><br />#include <br />#include <br />int main(void){<br />char *str1 = "hoge", *str2 = "piyo";<br />int ret1 = strcmp(str1, str2), ret2 = memcmp(str1, str2, 3);<br />printf("%d %d¥n", ret1, ret2);<br />return 0;<br />}<br /><br />結果。<br />-8 -8<br />'h' => 0x68<br />'p' => 0x70<br />なので、やはり引き算してるっぽい。<br />ということで、h->aにしてやってみたら<br />-15 -15<br />'a' => 0x61<br />なので、やはり引き算してそうです。<br /><br />Anonymoushttps://www.blogger.com/profile/16393857587962289774noreply@blogger.com