3

Visual Studio 2012でワイド文字を出力する際に​​奇妙な問題が見つかりました。これを、次のコードに絞り込みました。

#include <cstdio>
int main()
{
  fputws(L"Hello World\n", stdout); // Throws Access Violation exception
}

これをVisualC++ 2012でコンパイルすると、「未処理の例外」、「アクセス違反の読み取り場所0x00000064」が内部のどこかにスローされfputwsます。

私がコンパイルに使用しているのは、IDEの設定を除外するためのCLIバージョンです。Visual Studioコマンドプロンプトを開き、次を使用しています。

cl test.cpp

VisualStudio2008またはVisualStudio2010を使用する場合は、「HelloWorld」と書き出すとうまく機能します。

ただし、Visual Studio 2012を使用すると、上記のエラーでクラッシュします。

私はそれがコンパイラの問題であるとは信じがたいですが、C++の異なるバージョン間で変更されたものです。

もう1つの(面白い)ことは、char以下のコードスニペットのように、最初に通常の出力を実行すると、問題なく機能することです。では、初期化されていないストリームの問題だと思いますか?

#include <cstdio>
int main()
{
  fputs("", stdout);
  fputws(L"Hello World\n", stdout); // Now this works.
}

誰かアイデアがありますか?

編集:

次の同様の関数は、VS2012で正常に機能します。

std::wcout << L"Hello world" << std::endl;
wprintf(L"Hello world\n");
_putws(L"Hello\n", stdout);
putwchar(L'H');

編集2:マイクロソフトにバグレポートを提出したところです。

4

1 に答える 1

1

RTM VS2012でこの問題が発生しましたが、VS2012 Update1では発生しませんでした。問題のあるシステムにUpdate1をインストールした後、エラーは消えました。これを報告してくれたMatsに感謝します。

于 2013-02-15T02:01:57.940 に答える