teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

表示結果部分の修正

2017/05/21 05:33

投稿

退会済みユーザー
answer CHANGED
@@ -74,15 +74,11 @@
74
74
 
75
75
  >main.exe => ファイルにリダイレクトせずに実行
76
76
  Hello, World! => コマンドプロンプトに表示される
77
-
78
77
  >main.exe > hello.txt => hello.txtにリダイレクト
79
78
  => コマンドプロンプトには表示されない
80
-
79
+ >type hello.txt => hello.txtの中身をコマンドプロンプトに表示
80
+ Hello, World!
81
81
  ```
82
82
 
83
- ```
84
- Hello, World! => hello.txtの中身
85
- ```
86
-
87
83
  `freopen_s`を使用した最初の方法ではファイルにリダイレクトしても何も書き込まれませんでしたが、今回のはちゃんと書き込まれました。
88
84
  これでいかがでしょう?

1

新しいコードの追加

2017/05/21 05:33

投稿

退会済みユーザー
answer CHANGED
@@ -32,4 +32,57 @@
32
32
  }
33
33
  ```
34
34
 
35
- ※VC++の場合、`freopen_s`では無く`freopen`を使わないと`FreeConsole`で例外が発生して停止します。
35
+ ※VC++の場合、`freopen_s`では無く`freopen`を使わないと`FreeConsole`で例外が発生して停止します。
36
+
37
+ ---
38
+
39
+ 色々と調べた結果の修正版
40
+
41
+ ```cpp
42
+ #include <windows.h>
43
+ #include <tchar.h>
44
+ #include <io.h>
45
+ #include <fcntl.h>
46
+ #include <stdio.h>
47
+
48
+ int APIENTRY _tWinMain(HINSTANCE, HINSTANCE, LPTSTR lpCmdLine, int)
49
+ {
50
+ if (!AttachConsole(ATTACH_PARENT_PROCESS)) {
51
+ AllocConsole();
52
+ }
53
+
54
+ HANDLE hConOut = GetStdHandle(STD_OUTPUT_HANDLE);
55
+ int fd = _open_osfhandle((intptr_t)hConOut, _O_TEXT );
56
+ *stdout = *_fdopen(fd, "w");
57
+ setvbuf(stdout, nullptr, _IONBF, 0);
58
+
59
+ printf("Hello, World!\n");
60
+
61
+ Sleep(2000);
62
+
63
+ _close(fd);
64
+ FreeConsole();
65
+
66
+ return 0;
67
+ }
68
+ ```
69
+
70
+ 実行結果:
71
+
72
+ ```
73
+ >g++ main.cpp -mwindows -o main.exe => subsystemをGUIにしてビルド
74
+
75
+ >main.exe => ファイルにリダイレクトせずに実行
76
+ Hello, World! => コマンドプロンプトに表示される
77
+
78
+ >main.exe > hello.txt => hello.txtにリダイレクト
79
+ => コマンドプロンプトには表示されない
80
+
81
+ ```
82
+
83
+ ```
84
+ Hello, World! => hello.txtの中身
85
+ ```
86
+
87
+ `freopen_s`を使用した最初の方法ではファイルにリダイレクトしても何も書き込まれませんでしたが、今回のはちゃんと書き込まれました。
88
+ これでいかがでしょう?