尝试使用 ReadFile 读取标准输入可以在 Windows 8+ 上运行,但在 Windows 7 上会崩溃。
#include <windows.h>
int main() {
char c[1];
HANDLE in = GetStdHandle(STD_INPUT_HANDLE);
ReadFile(in, c, 1, NULL, NULL);
return 0;
}
产生
Program received signal SIGSEGV, Segmentation fault.
0x00000000770f5803 in VerifyConsoleIoHandle () from C:\Windows\system32\kernel32.dll
在 Windows 7 上
最佳答案
在 Windows 8 及更高版本上,在写入之前会检查此参数是否为 NULL(实际上使其成为可选),但这在任何地方都没有记录。
读取标准输入而不检查读取的字节数无论如何都是一个坏主意,因为如果输入重定向到管道,则读取的字节数可能小于请求的字节数(甚至为 0)。
关于c - 标准输入上的 ReadFile 在 Windows 7 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43160968/