ipconfig / all使用C编程会导致不完整的命令行错误

时间:2018-07-11 13:48:18

标签: c

这里是编程初学者,所以我正在研究一个简单的程序,该程序使用用户的输入来命名文本文件,然后该程序将ipconfig / all信息存储在该文本文件中。我收到错误消息“无法识别或命令行不完整”。我知道使用命令提示符将ipconfig / all写入文本文件非常容易,但我希望可以使用C使其工作。

谢谢!

#include<stdlib.h>

#define MAX_LEN 20

int main()
{
    char myfile[MAX_LEN];

    printf ("Enter text file name: ");
    scanf ("%s", myfile);

    system("C:\\Windows\\System32\\ipconfig /all 2>&1 \\Location\myfile.txt");

   return 0;
}

1 个答案:

答案 0 :(得分:1)

这里有很多错误

  • 不使用您刚刚输入的字符串
  • 反斜杠的转义错误
  • 在命令行中忘记重定向(仅在文件名之前)。例如:system("C:\\Windows\\System32\\ipconfig /all 2>&1 > myfile.txt")

但是:

  • 您不应为此使用systempopen可以获取命令输出,而无需进行难看的重定向
  • 无需消除标准错误,所有有趣的输出都在标准输出中
  • 无需指定命令的路径,因为该路径已经是系统命令

我的使用popen的建议(它缺少一些错误检查之类的方法,但基本上可以正常工作),该建议会返回一个管道句柄。只需逐个字符地读取它,直到最后,然后将结果写入输出文件即可:

#include<stdio.h>
#define MAX_LEN 20

int main()
{
    char myfile[MAX_LEN];

    printf ("Enter text file name: ");
    fflush(stdout);
    scanf ("%19s", myfile);
    FILE *f = popen("ipconfig /all","r");
    FILE *fw = fopen(myfile,"w");
    if (fw)
    {
     while(1)
     {
       int c = fgetc(f);
       if (c == EOF) break;
       fputc(c,fw);
     }
     fclose(fw);
     pclose(f);
    }

   return 0;
}