比较两个内存地址并显示它们相等

标签 c

char * str = "012";

int main(int argc, char * argv[]) {
  if (str == argv[1]) {
    printf("success");
  }
}

输出:

./test 0x400634

然后我应该得到输出成功。

但是我无法得到任何输出。我如何比较这两个地址并打印它们是否相等。 请帮忙...

最佳答案

我认为您对字符串在 C 中的工作方式有些困惑。

字符串是字符数组,具有相同内容的两个字符串不一定具有相同的地址。

此外,argv 仅包含字符串。如果您将数字传递给程序,它将被解释为字符串,而不是数字。因此,当您将 argv[1]str 进行比较时,即使您可以知道 str 将位于哪个地址(您不能) ,您将比较 str 的地址与 argv[1] 的地址,而不是其内容。

如果您希望将 argv[1] 提取为数字,请使用 strtol (如此处所述: https://stackoverflow.com/a/20654510/2830652 )

if ((long)str == strtol(argv[1], NULL, 16))
{
    printf("success");
}

将允许您比较正确的数据,只需在将其传递给程序时省略地址的 0x 部分即可。

关于比较两个内存地址并显示它们相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689772/

相关文章:

c - waitpid - WIFEXITED 返回 0 尽管 child 正常退出

c - Gstreamer。对 `gst_video_overlay_set_window_handle' 的 undefined reference

c - 缺少 PDB 文件

c - 指向带 argv 的指针的指针

c - 使用 fread 读取文件不会按预期结束

c - 在添加到动态数组时转义循环 - C

c - 将链表实现与 malloc 函数分离

c - 在 C 中动态分配二维数组

c - C的sizeof()函数

c - 使用 Win32 和视觉样式的按钮背景透明度