#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”,但是会打印一些垃圾值。请解释原因?
答案 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;
}