命令行参数传递

时间:2012-10-21 13:17:59

标签: c command-line

#include<stdio.h>

int main(int number, char arg[])
{
    int i;

    printf("%d\n",number);

    for(i=0;i<7;i++)
        printf("%c",arg[i]);
    printf("\n");   

    return 0;
}

我在ubuntu终端中运行它并通过输入“./a.out”来运行它。我希望输出为“./a.out”,但是会打印一些垃圾值。请解释原因?

4 个答案:

答案 0 :(得分:2)

main()的签名错误:

int main(int number, char arg[])

应该是:

int main(int number, char *arg[])

然后在打印时像二维数组一样访问它,如:

for(i=0;i<strlen(argv[0]);i++)
    printf("%c",arg[0][i]);

或者只是在索引0处打印字符串:

printf("%s",arg[0]);

答案 1 :(得分:2)

因为您错过了argv的类型。操作系统为您预先解析参数(用空格分隔它们),因此您最终会得到一个字符串数组。你应该写:

int main(int argc, char **argv)
{
    int i;
    for (i = 0; i < argc; i++) {
        printf("%s ", argv[i]);
    }

    return 0;
}

以便重新获得整个命令行。

P上。 s。:你应该真正命名main() argc和argv的参数。这是惯用的,而不是这样做很奇怪。

答案 2 :(得分:0)

main的签名是int main (int argc, char* argv[]) - 即argv是一个字符串数组,而不是字符数组。

答案 3 :(得分:0)

main函数按惯例采用int作为第一个参数(这在代码中是正确的),但第二个参数必须是chars数组(char *argv[])上的指针。

这必须是这样的,因为当你的程序被调用时,它在这个数组中有它的paremeter。 如果您致电./a.out foo bar,则数组将为

arg[0] = "./a.out"
arg[1] = "foo"
arg[2] = "bar"

,整数将包含3,即给你的程序的参数数量。

如果您想打印给您的程序及其参数的参数数量,您需要将代码转换为此

int main(int number, char *arg[]) // the right main prototype
{
    int i;

    printf("%d\n",number);

    for(i=0;i<number;i++) // from i = 0 to the number of parameters
        printf("%s\n",arg[i]); // print a string (%s)

    return 0;
}