0

私は次のコードを書きました:

int fd = _dup(fileno(stdout));
FILE* tmp = freopen("tmp","w+",stdout);
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
if (out == INVALID_HANDLE_VALUE){
      //error
}
else if (out == NULL) {
      //error
}
else {
   WriteFile(out, "num", sizeof("num"), NULL, NULL);
 }

最後の行で、アサーション " Unhandled exception...:Access violation writing location 0x000000" が得られます。何が問題で、その修正方法は?

ありがとうございました。

PS: プロジェクトの制限により、freopen を使用できません

4

1 に答える 1

4

WriteFile の最後の 2 つのパラメーターのうち 1 つだけを NULL にすることができます。もう 1 つは有効なポインターでなければなりません。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747.aspx

あなたの場合、おそらくlpNumberOfBytesWrittenを使いたいでしょう。

DWORD written;
WriteFile(out, "num", sizeof("num"), &written, NULL);
于 2012-04-23T19:45:55.583 に答える