1. 程式人生 > >strcmp在不同系統/編譯器下的結果不同

strcmp在不同系統/編譯器下的結果不同

在MOOC裡C語言程式設計(翁愷)10.2節第三個視訊中,程式碼:

#include <stdio.h>
#include <string.h>
int main(int argc,char const *argv[])
{
    char a[]="abc";
    char b[]="abc ";
    printf("strcmp=%d\n",strcmp(a,b));
    printf("A-a=%d\n",'A'-'a');
    return 0;
}

視訊中執行結果為:


而在windows7 x64-codeblocks 13.12 with mingw中的結果為


經測試只有“0”,“-1”,“1”三種結果。這是什麼原因呢?

按視訊程式碼手寫strcmp函式:

#include <stdio.h>
#include <string.h>
int mycmp(const char* a,const char* b)
{
    while(*a==*b&&*a!='\0')
    {
        *a++;
        *b++;
    }
    return *a - *b;
}
int main(int argc,char const *argv[])
{
    char a[]="abc";
    char b[]="abc ";
    printf("strcmp=%d\n",strcmp(a,b));
    printf("mycmp=%d\n",mycmp(a,b));
    printf("A-a=%d\n",'A'-'a');
    return 0;
}


則輸出結果與視訊結果相同。

我猜問題出在標頭檔案<string.h>上。windows7裡或者說是CB13.12的標頭檔案與視訊中mac osx有區別。下週有空的話,我借朋友的mac air來一探究竟。