0

我正在转换一些使用 memcmp 函数但没有得到预期输出的测试。现在我一直在试图弄清楚为什么 windows 和 linux 的输出存在差异,最后我找到了godbolt.orgx86-64 gcc 10.3在那里我玩弄了不同的 gcc 版本,令我惊讶的是和之间存在差异x86-64 gcc 11.1。你能帮我弄清楚正确的输出是什么吗?

使用的代码:

#include <string.h>
#include <iostream>

int main()
{
      char16_t const * p10 = u"Same";
      char16_t const * p210 = u"NotSame";
      auto result10 = memcmp(p10, p210, sizeof(p10));
      std::cout << result10 << "\n";

      char16_t const p11[] = u"Same";
      char16_t const p211[] = u"NotSame";
      auto result11 = memcmp(&p11, &p211, sizeof(p11));
      std::cout << result11 << "\n";
}

Gcc 10.3 输出

5
5

Gcc 11.1 输出

5
1

VS 2019 / MSVC 14.29.30133 输出

1
1

在这个例子中,MSVC 看起来总是准确地返回 1。对于 gcc,有时情况并非如此,因为它似乎会返回差异。所以介于83'S'and78'N'是 5 所以返回。现在我的问题是,这是正确的输出还是在这种情况下应该只是“1”来表示存在差异并且 ptr1 高于 ptr2?我查看了一些文档,但对于它应该是什么有点模糊。

4

0 回答 0