我正在转换一些使用 memcmp 函数但没有得到预期输出的测试。现在我一直在试图弄清楚为什么 windows 和 linux 的输出存在差异,最后我找到了godbolt.org。x86-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?我查看了一些文档,但对于它应该是什么有点模糊。