如何在C中有效地使用2个argc

时间:2014-03-30 00:51:13

标签: c arguments argv argc

我正在编写一个非常简单的程序代码。

首先,它有“-num”选项作为第二个argc。如果您在第3个argc中输入任何内容,程序将只输入第3个argc。

以下是输入和输出的示例。

输入命令行1:

./test -num

输出1

-num

输入命令行2:

./test -num AnythingHere

输出2

-num 3rdArgcEntered

我还想让以下命令行使用粘贴的argc(-num和AnythingHere粘在一起)来提供与输出2相同的输出:

./test -numAnythingHere

我希望获得的输出是:

-num 3rdArgcEntered

但我获得了:

None

这是我目前正在处理的源代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    if (!strcmp(argv[1], "-num")) 
    {
        printf("-num ");

        if(argc==3){
            printf("3rdArgcEntered");
        }
    }
    else
    {
        printf("None");
    }

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

2 个答案:

答案 0 :(得分:1)

一点垃圾..

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    /* doesnt check when args are not entered */
    char *tmp = argv[1];
    char buff[5];
    /* copy -num, doesnt check */
    memcpy(buff, tmp, 4);
    buff[4] = '\0';

    if (!strcmp(buff, "-num")) 
    {
        printf("-num ");

        /* larger than -num */
        if(argc==3 || strlen(tmp) > 4 ){
        printf("3rdArgcEntered");
        }
    }
    else
    {
         printf("None");
    }

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

答案 1 :(得分:0)

你的程序不会影响参数的传递方式;显然main已在main开头调用strtok。您需要自己解析每个参数,或者使用为您执行此操作的库。要自己解析它们,您可以查看sscanfgetopt,或迭代字符。但是通常更喜欢更具体的库,例如{{1}},因为它可以让您的程序以与其他命令行实用程序一致的方式运行。