为什么此代码会返回-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;
}
答案 0 :(得分:4)
对于初学者,memcmp()
有三个参数:指向要比较的内存段的指针和大小。虽然代码可以用C编译(我认为不应该)但它肯定不能用C ++编译。如果代码编译,第三个参数是一个非常随机的值,并且这些字符串之后的内存不太可能相同。
答案 1 :(得分:2)
它既不会在C语言中也不会在C ++中编译。在C中,第一个只在你不包含<stdlib.h>
并且它只是调用未定义的行为时才编译,因为将参数传递给一个小于其参数的函数会调用UB。
这是输出: