printf
でコンソール上の行を簡単に印刷できます。しかし、std
ライブラリなしで行を読む方法は?STDなしでコンソールから行を読む
答えて
を、あなたのコードは間で移植であることが保証されます異なるプラットフォーム。それがなければ、ターゲットとするすべてのプラットフォームのコードを記述する必要があります。
printf
とscanf
、std::cout
とstd::cin
とstd::cerr
は/標準入力から読み込み、標準出力/標準エラー出力への書き込みに書き込むためのポータブルな方法を提供します。あなたはこれを回避したい場合、あなたはあなたができる、あなたが見
ssize_t write(int fd, const void* buf, size_t count);
を使用して
HANDLE GetStdHandle(DWORD nStdHandle);
BOOL WINAPI WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
とし、POSIX準拠のシステムでは、Windowsで標準出力に記述する必要があり、決してポートGetStdHandle
とWriteFile
Unixに接続したり、write
をWindowsや他のシステム(Solarisなど)に移植することはできません。ラッパー関数を書こうと思っていても、標準化されたライブラリを使うよりも苦労します。
P.S.後者は0、1、2
を必要とするDWORD nStdHandle
WinAPIのパラメータを使用すると、一見単純な何かをしようとしても、あなたがやってしまいます、それぞれ、旧requires -10
, -11
and -12
for stdin/stdout/stderrint fd
UnixのAPIが異なります残業。
標準化:
#include<stdio.h>
printf("%d + %d = %d\n", a, b, a+b);
のUnix:
#include <unistd.h>
// <stdio.h> and <string.h> is still needed.
char buf[64];
snprintf(buf, sizeof(buf)/sizeof(char),
"%d + %d = %d\n", a, b, a+b);
ssize_t written =
write(1, buf, strlen(buf));
Windowsの場合:たとえば
#include <windows.h>
char buf[64];
snprintf(buf, sizeof(buf)/sizeof(char),
"%d + %d = %d\n", a, b, a+b);
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwWritten;
BOOL failed = WriteFile(
hOutput, buf, strlen(buf), &dwWritten, NULL
);
は実際にあなたがしたくない場合は、自分で文字列を解析する必要があります標準機能を使用する。私は簡単な説明のためにsnprintf
/strlen
を使用しましたが、確かにそれは余分な作業です。
標準ライブラリは、クロスプラットフォームであることが保証されているメソッドを提供するため、使用することをお勧めします。
プラットフォームをターゲットとする特定のコードを記述する必要がない場合は、 Linuxをターゲットにしたい場合は、あなたがread()
使用するたとえば、
を:標準化された方法を使用してファイルディスクリプタから
読み取り
- 1. コンソールからC#でjarストリームを読む
- 2. コンソールからすでに入力された行を読むC++
- 3. コンソールからキリル文字を読む
- 4. コンソールからsvnコミットメッセージを読む
- 5. stdin(コンソール)から行列を読み込む方法は?
- 6. Javaのコンソールから複数の行を読む
- 7. "メインではない"プロセスでコンソールから読み込む方法
- 8. テキストファイルから行を読む
- 9. ウェブサイトから行を読む
- 10. std :: fstream Windows C++でファイルを読む
- 11. MonoDevelopでコンソール入力を読む
- 12. コンソールのバイナリツリーをcで読み込む
- 13. Vecまたはスライスから(std :: io :: Read)を読むには?
- 14. プログラムを一時停止せずにコンソールから読み込む
- 15. Javaのコンソールから1文字を読む
- 16. コンソールから整数と文字列を読み込む
- 17. 整数をコンソールからベクタに読み込む方法
- 18. コンソールからintを読み込む方法(mips-qtspim)?
- 19. コンソールから既に書き込まれたテキストを読む
- 20. Javaコンソールからの整数行の読み出し
- 21. pythonを使ってChromeのコンソールからデータを実行して読み込む方法はありますか?
- 22. Python - 読み込むコンソールの行を選択する方法
- 23. C - テキストファイルから複数行を読む
- 24. ログファイルから最後の行を読む
- 25. バイナリファイルから行を読むC++
- 26. Word文書から行を読む
- 27. 文字をエコーすることなくスキャンしてコンソールから読むことはできますか?ここ
- 28. C#のコンソールから未知数の行を読むことはできますか?
- 29. Node.jsでSelenium Webdriver Chromeを使用してコンソールを読む
- 30. std :: map/std :: unordered_mapの安全性を読む
なぜ標準ライブラリがないのですか? – Rakete1111
'std'はプラットフォーム間で動作することを保証します。プラットフォーム固有の機能を使用したくない場合は、そのプラットフォーム固有の機能を使用する必要があります。 –
'printf'の' scanf'の反対 –