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来一探究竟。

猜你喜欢

转载自blog.csdn.net/qq_39522282/article/details/78717626
今日推荐