0
#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

4 回答 4

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]);
于 2012-10-21T13:20:32.907 回答
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 的参数。这是惯用的,不这样做很奇怪。

于 2012-10-21T13:22:16.963 回答
0

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

于 2012-10-21T13:20:51.787 回答
0

按照惯例,main 函数将 int 作为第一个参数(这在您的代码中是可以的),但第二个参数必须是字符数组 ( char *argv[]) 上的指针。

必须如此,因为当你的程序被调用时,它的参数就在这个数组中。如果你打电话./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;
}
于 2012-10-21T13:25:02.483 回答