gpt4 book ai didi

c - 为什么初始数组元素的地址比较相等?

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:51 24 4
gpt4 key购买 nike

我一直在做一个项目,我花了最后一个小时试图找出我代码中的错误。经过仔细检查,我发现了一些很奇怪的问题,这一直是问题所在。

奇怪的是,我的数组初始元素的地址与 memcmp() 比较相等。我已经分离了我的代码并尝试了一个测试代码,我得到了类似的结果。有人可以解释这种奇怪的行为吗?

#include <stdio.h>
#include <string.h>

int main(void)
{
char buf[256];

char *p1 = buf;
char *p2 = buf + 3;

if (memcmp(p1, p2, sizeof(char *)) == 0) {
puts("equal...");
}

p1 = buf + 100;
p2 = p1 + 3;

if (memcmp(p1, p2, sizeof(char *)) == 0) {
puts("equal...");
}
return 0;
}

最佳答案

你有未定义的行为

局部变量,无论是简单的整数还是数组,都不会被初始化。它们的值不确定。在初始化之前以任何方式使用它们,甚至读取它们,都会导致未定义的行为

此外,您不是在比较两个字符,而是一次比较 4 个或 8 个字符,具体取决于您使用的是 32 位系统还是 64 位系统。如果您想比较单个字符,您应该使用 sizeof(char)(指定为始终等于 1)。您也不是在比较指针,而是在比较它们指向的内容。

如果您想比较两个单个字符,请改用比较等于运算符 ==,例如*p1 == *p2 或简单地 buf[0] == buf[3]

关于c - 为什么初始数组元素的地址比较相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38539245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com