C 命令行参数传递 #包括 int main(int编号,字符参数[]) { int i; printf(“%d\n”,数字); 对于(i=0;i

C 命令行参数传递 #包括 int main(int编号,字符参数[]) { int i; printf(“%d\n”,数字); 对于(i=0;i,c,command-line,C,Command Line,您对main()的签名错误: #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; } 应该是: int main(int number, char arg[]) 然后在打

您对
main()
的签名错误:

#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;
}
应该是:

int main(int number, char arg[])
然后在打印时像二维阵列一样访问它,如:

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

您对
main()
的签名错误:

#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;
}
应该是:

int main(int number, char arg[])
然后在打印时像二维阵列一样访问它,如:

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

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

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

因为您缺少
argv
的类型。操作系统会为您预解析参数(用空格分隔),因此您将得到一个字符串数组。您应该编写:

printf("%s",arg[0]);
int main(int argc,char**argv)
{
int i;
对于(i=0;i
为了恢复整个命令行调用


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

因为你缺少
argv
的类型。操作系统为你预解析参数(用空格分隔),所以你最终会得到一个字符串数组。你应该写:

printf("%s",arg[0]);
int main(int argc,char**argv)
{
int i;
对于(i=0;i
为了恢复整个命令行调用


注:您应该真正命名
main()
argc和argv的参数。
这很习惯,不这样做很奇怪。

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

这是因为当你的程序被调用时,它在这个数组中有它的参数。 如果调用
/a.out foo bar
,数组将

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

    return 0;
}
整数将包含3,即给定给程序的参数数

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

arg[0] = "./a.out"
arg[1] = "foo"
arg[2] = "bar"
intmain(intnumber,char*arg[])//右主原型
{
int i;
printf(“%d\n”,数字);

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

这是因为当你的程序被调用时,它在这个数组中有它的参数。 如果调用
/a.out foo bar
,数组将

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

    return 0;
}
整数将包含3,即给定给程序的参数数

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

arg[0] = "./a.out"
arg[1] = "foo"
arg[2] = "bar"
intmain(intnumber,char*arg[])//右主原型
{
int i;
printf(“%d\n”,数字);

对于(i=0;i不仅如此,除非arg肯定有足够的值,使得arg[7]是一个有效的数组访问,代码实际上是从内存中提取一个随机值,不是吗?@mcl这是一个非常有效的点。由于OP似乎想使用字符打印,我将它改为使用
strlen
,因为字符串保证有空终止。@KingsIndian您还应该优化
strlen(argv[0])
将一部分转换为一个变量-不需要在每个操作上调用strlen,也不是每个编译器都能意识到这一事实。@H2CO3我同意,但这实际上只是为了打印一个字符串
arg[0]
。希望OP能随着时间的推移学习其他东西;-)@KingsIndian我希望它真的,我也是,因为到目前为止他所展示的东西都没有价值。不仅如此,除非arg肯定有足够的价值,以至于arg[7]是一个有效的数组访问,代码实际上是从内存中提取一个随机值,不是吗?@mcl这是一个非常有效的点。由于OP似乎想使用字符打印,我将它改为使用
strlen
,因为字符串保证有空终止。@KingsIndian您还应该优化
strlen(argv[0])
将一部分转换为一个变量-不需要在每个操作上调用strlen,也不是每个编译器都能意识到这一事实。@H2CO3我同意,但这实际上只是为了打印一个字符串
arg[0]
。希望OP能随着时间的推移学习其他东西;-)@KingsIndian我真的希望它,我也是,因为他迄今为止所展示的并不那么有价值。