2013-10-09 115 views
0

我正在为一个类设计一个程序,其中一条指令是使用命令行输入。例如,当您运行main -n 5 3时,它将以53作为参数。什么是-n命令行输入作为参数

如何在带有代码块的PC而不是Linux机器上测试此功能?
我的程序如何读取这些内容?
我需要命名我的文件主,然后在主要有两个参数适当传入?

+1

'-n'是'的argv [1]','5'是'的argv [2]'和'3'是'的argv [3]' – luiscubal

+0

我不明白什么-n应该代表我的程序中,那么我只需要两个参数,即5和3. –

+0

你自己写了这个程序吗?如果是这样,那么你可以选择'-n'的意思,如果它接受。您可以随时打印错误消息并在发现意外参数时中止程序。 – luiscubal

回答

4

在你的程序你main函数原型

int main (int argc, char ** argv); 

argc将包含的参数量过去了,argv是一个指向char*数组包含你的参数为空值终止字符串。

通常argv[0]包含您的程序的名称,argv[1]您的第一个参数,依此类推。在你的情况下,如果运行的参数程序-n 5 3你将不得不在argv以下内容

argv[1] = "-n" 
argv[2] = "5" 
argv[3] = "3" 
+0

这是有道理的,所以我可以访问数组来分配在我的程序中使用的整数。这是我可以在Windows上测试的东西吗? –

+0

@PaulthePirate是的,但请记住它们是以字符串的形式出现的。你需要首先用'atoi'或类似的函数将它们转换为整数。试着打印你的参数:'int i; for(i = 0; i

+0

@PaulthePirate试试这个:http://pastebin.com/Y8VAta1w – luiscubal

1

A.EXE -n 5 3

结果:

argv[0] = a.exe
argv[1] = -n
argv[2] = 5
argv[3] = 3
argv[4] = NULL

argc和将4


在Linux上,有一个在unistd.hgetopt功能,可以帮助您检索n选项,并解析后面的参数。 Howevef如果你的程序只需要找到-n和读取接下来的两个参数的值,你可以这样做:

int i, x = 0, y = 0; 
for (i = 0; i < argc; i++) { 
    if (strcmp(argv[i], "-n") == 0 && i + 2 < argc) { 
     x = atoi(argv[i+1]); 
     y = atoi(argv[i+2]); 
    } 
} 
+0

我没有linux,所以我不能真正测试它,但我的文件需要在Linux上工作,所以我想在我移植到linux之前做尽可能多的测试。 –

+0

@PaulthePirate:我已经更新了我的答案+添加了一些额外的信息:) – LihO

+0

将int n = atoi(argv [1]); char * address = argv [2];工作?假设最后一次输入的字符串为 –

1

正如其他人所指出的那样,参数argv中[...]。在现实世界中,许多人使用类似getopt的东西来解析参数,因为它非常强大并且已经过测试。

1

通常C使用argc和argv来允许您索引从命令行传递的参数。我有一段时间没有在PC上工作,但是当我做的代码与Unix一致时。

#include <stdio.h> 

int main (int argc, char *argv[]) { 
    printf("Total args count=%s\n", argc); 
    printf("Command=%s\n", argv[0]); 

    for (i=1; i< argc; i++) { 
    printf("\narg%d=%s", i, argv[i]); 
    } 

    printf("\n"); 
    return 0; 
} 

这将返回

Total Args 4 
Command main 
    1 = -n 
    2 = 5 
    3 = 3