为什么这段代码没有返回0?

时间:2013-11-30 23:52:38

标签: c++ c

为什么此代码会返回-1

memcmp()比较内存块并在构造函数中获取3个参数但是当我错过第三个参数时会发生什么?

int main()
{
    char ptr[] = "hello";
    char ptr1[] = "hello";

    int a = memcmp(ptr,ptr1);
    printf("%d",a);

    return 0;
}

如果没有第三个参数,以下程序也会突然终止:

int main()
{
    char *ptr = "hello";
    char *ptr1 = "hello";

    int a = memcmp(ptr,ptr1);
    printf("%d",a);

    return 0; 
}

2 个答案:

答案 0 :(得分:4)

对于初学者,memcmp()有三个参数:指向要比较的内存段的指针和大小。虽然代码可以用C编译(我认为不应该)但它肯定不能用C ++编译。如果代码编译,第三个参数是一个非常随机的值,并且这些字符串之后的内存不太可能相同。

答案 1 :(得分:2)

它既不会在C语言中也不会在C ++中编译。在C中,第一个只在你不包含<stdlib.h>并且它只是调用未定义的行为时才编译,因为将参数传递给一个小于其参数的函数会调用UB。

这是输出:

enter image description here