为什么visual studio会提供另一个结果而不是g ++?这里涉及未定义的行为吗?

Zhi*_*Xun 6 c++ gcc fstream visual-studio

此C++代码旨在将文件中的数据从67~69移动到70~72:

#include <fstream>
#include <iostream>

int main() {
  std::fstream file("test", std::ios::out);
  file.close();
  file.open("test", std::ios::binary | std::ios::in | std::ios::out);
  for (char i = 0; i < 127; ++i) 
    file.write(&i, 1);

  file.seekp(70);
  file.seekp(-3, std::ios::cur);

  char s[100];
  for (int i = 0; i < 100; ++i)
    s[i] = '\0';

  file.read(s, 3);
  for (int i = 0; i < 3; ++i)
    std::cout << (int)s[i] << " ";

  std::cout << std::endl;

  file.write(s, 3);
  file.seekp(-3, std::ios::cur);
  file.read(s, 3);

  for (int i = 0; i < 3; ++i)
    std::cout << (int)s[i] << " ";

  std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

s我读它的两次内容应该是相同的,就像我们用g ++编译代码时的输出一样:

67 68 69
67 68 69
Run Code Online (Sandbox Code Playgroud)

但Visual Studio中的结果是不同的:

67 68 69
70 71 72
Run Code Online (Sandbox Code Playgroud)

是否有涉及导致错误的未定义行为?我该如何解决?