0

问题是这样给出的:

在 Win32 API 中使用 CreateProcess()。在这种情况下,您需要指定要从 CreateProcess() 调用的单独程序。正是这个单独的程序将作为输出斐波那契数列的子进程运行。执行必要的错误检查以确保在命令行上传递非负数。

我做了以下事情。它不显示任何错误消息。当我尝试执行它时,它会自动退出:

#include <sys/types.h>
#include <windows.h>
#define _WIN32_WINNT 0x0501

#include <stdio.h>

int main()
{

  STARTUPINFO si;   
  PROCESS_INFORMATION  pi;   
  int a=0, b=1, n=a+b,i,ii;  

  ZeroMemory(&si, sizeof(si));

  si.cb = sizeof(si);


  if(! CreateProcess("C:\\WINDOWS\\system32\\cmd.exe",NULL,NULL,NULL,FALSE,0,
                     NULL,NULL,&si,&pi))
    printf("\nSorry! CreateProcess() failed.\n\n");
  else{    
    printf("Enter the number of a Fibonacci Sequence:\n");
    scanf("%d", &ii);

    if (ii < 0)
      printf("Please enter a non-negative integer!\n");
    else
    {         
      {
         printf("Child is producing the Fibonacci Sequence...\n");
         printf("%d %d",a,b);
         for (i=0;i<ii;i++)
         {
            n=a+b;
            printf("%d ", n);
            a=b;
            b=n;
         }
         printf("Child ends\n");
      }

      {
         printf("Parent is waiting for child to complete...\n");
         printf("Parent ends\n");
      }
    }
  }

  WaitForSingleObject(pi.hProcess, 5000);    
  printf("\n");

  // Close process and thread handles.    
  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);

  return 0;
}

我究竟做错了什么?

4

3 回答 3

2

我想你误解了你的练习。此外,您可能希望在使用 CreateProcess 时处理继承。这可能超出您的技能水平,但仍然是一个有用的教训:http: //support.microsoft.com/kb/q190351/

于 2009-09-19T08:26:59.803 回答
0

问题是生成一个输出斐波那契数列的过程。在主进程中获取/验证用户输入,然后生成另一个程序(单独编写)来打印斐波那契数列。将用户输入作为命令行参数传递给生成的进程。

于 2009-09-14T15:30:38.223 回答
0

你为什么要调用cmd.exe你的进程?问题表明,您正在启动的进程应该打印斐波那契数列。您不应该在主进程/应用程序中执行此操作。

你应该有一个单独的程序,它接受一个参数并打印斐波那契数列中的许多项目。您的主程序应该向用户询问一个数字,然后通过将此数字作为参数传递来启动另一个程序。

于 2009-09-14T15:24:51.117 回答