strcmp在不同系統/編譯器下的結果不同
阿新 • • 發佈:2019-01-05
在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來一探究竟。