由于某种原因,创建过程会打开cmd 即使未指定 然后按Enter键会在命令行中弹出更多cmd实例。
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <direct.h>
void main()
{
char cmd[255];
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
for(;;)
{
fgets(cmd,255,stdin);
CreateProcess(cmd,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
}
}
答案 0 :(得分:0)
首先,当插入的字符串的大小<(255-1)时,fgets
将得到一个具有字符'\ n'的字符串。因此,我们将\n
设置为\0
:
fgets(cmd, 255, stdin);
cmd[strlen(cmd) - 1] = '\0';
CreateProcess(cmd, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
第二,
要在命令行中弹出更多cmd实例。
如果您的意思是:
这是因为cmd进程和当前进程的输入焦点交替出现在同一控制台中,而不总是创建新实例。
如果您用CreateProcess
CREATE_NEW_CONSOLE
:
CreateProcess(cmd, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);