【发布时间】:2026-02-08 22:50:01
【问题描述】:
我附上了现有的控制台表单 C++ 程序。输出工作正常,但是当我尝试在控制台中输入一些输入时,最初在那里运行的终端会尝试处理它。 程序代码在这里:
#include <iostream>
#include "windows.h"
int main(int argc, char **argv)
{
pid_t pid = atoi(argv[1]);
BOOL fret = FreeConsole();
if (!fret)
{
std::cerr << "ERR" << GetLastError() << std::endl;
}
BOOL aret = AttachConsole(pid);
if (!aret)
{
std::cerr << "ERR" << GetLastError() << std::endl;
}
SetConsoleTitleA("TTTTTTTT");
for (int ii = 0; ii < 10; ii++)
{
std::cout << "ii " << ii << std::endl;
}
int kk;
std::cin >> kk;
std::cerr << "kk " << kk << std::endl;
return 0;
}
当我运行cmd,找出PID,运行我的程序然后写例如12回车,结果是这样的:
C:\>ii 0
ii 1
ii 2
ii 3
ii 4
ii 5
ii 6
ii 7
ii 8
ii 9
12
'12' is not recognized as an internal or external command,
operable program or batch file.
当我再次尝试写 12 时,效果更好(但仍然有 C:>)
C:\>12
kk 12
C:\>
编辑:我需要将 stdin、stdout 和 stderr 重定向到控制台,我可以运行其他东西然后 cmd 或向 cmd 发送一些命令。
【问题讨论】:
-
你依附于别人的控制台,期待奇怪的事情发生。 cmd.exe 通过读取控制台屏幕缓冲区中的字符而不是标准输入来获取输入在技术上是合法的,这很疯狂但合法。