为什么我们使用 argc -1?
Why we use argc -1?
这是一个给定参数取反的函数,这里为什么要用argc - 1
,只要int类型没有null可以比较,是不是要从count中减去文件名?如果您能展示 argc - 1 的其他用途,那就太好了。
int main(int argc, char **argv)
{
int i;
i = argc - 1;
while (i > 0)
{
printf("%s", argv[i]);
putchar('\n');
i--;
}
return (0);
}
就是代码写的不好,没什么值得学习和借鉴的。通过应用常识,我们可以将其重写为:
for(int i=1; i<argc; i++)
{
puts(argv[argc-i]);
}
假设我们不想打印 argv[0]
.
为了比较,这里还有两种写相同循环的方法。
方法二:
int main(int argc, char **argv)
{
int i;
for(i = argc - 1; i > 0; i--)
{
printf("%s\n", argv[i]);
}
}
方法三:
int main(int argc, char **argv)
{
int i = argc;
while(--i > 0)
{
printf("%s\n", argv[i]);
}
}
我阅读了之前的答案,我注意到他们试图为您提供另一种重写代码的方法,而我将向您解释 argc
和 argv
的工作原理。
您可能会注意到我们为什么要在主函数中声明参数,我们这样做:
int main(int argc, char **argv
这意味着当您尝试启动可执行程序时,您应该给它一些额外的参数。
argc
是从命令行传递给程序的参数数量
argv
是参数数组。
你应该知道数组从 0 开始,这意味着如果你想打印数组中的最后一个参数,你可以这样做:
printf("%s\n", argv[argc - 1]);
例如:
我有一个程序,它接受一个参数列表并一个一个地打印每个参数后跟换行符 \n
。
代码:
#include <unistd.h>
int main(int argc, char **argv)
{
int i;
int j;
while (argv[i])
{
j = 0;
while (argv[i][j])
{
write(1, &argv[i][j], 1);
j++;
}
write(1, "\n", 1);
i++;
}
}
注意:此程序不使用任何内置函数(wite
除外)。
如果您尝试编译并执行此代码:
➜ Desktop gcc test.c
➜ Desktop ./a.out test test1 test2
./a.out
test
test1
test2
➜ Desktop
这是一个给定参数取反的函数,这里为什么要用argc - 1
,只要int类型没有null可以比较,是不是要从count中减去文件名?如果您能展示 argc - 1 的其他用途,那就太好了。
int main(int argc, char **argv)
{
int i;
i = argc - 1;
while (i > 0)
{
printf("%s", argv[i]);
putchar('\n');
i--;
}
return (0);
}
就是代码写的不好,没什么值得学习和借鉴的。通过应用常识,我们可以将其重写为:
for(int i=1; i<argc; i++)
{
puts(argv[argc-i]);
}
假设我们不想打印 argv[0]
.
为了比较,这里还有两种写相同循环的方法。
方法二:
int main(int argc, char **argv)
{
int i;
for(i = argc - 1; i > 0; i--)
{
printf("%s\n", argv[i]);
}
}
方法三:
int main(int argc, char **argv)
{
int i = argc;
while(--i > 0)
{
printf("%s\n", argv[i]);
}
}
我阅读了之前的答案,我注意到他们试图为您提供另一种重写代码的方法,而我将向您解释 argc
和 argv
的工作原理。
您可能会注意到我们为什么要在主函数中声明参数,我们这样做:
int main(int argc, char **argv
这意味着当您尝试启动可执行程序时,您应该给它一些额外的参数。
argc
是从命令行传递给程序的参数数量argv
是参数数组。
你应该知道数组从 0 开始,这意味着如果你想打印数组中的最后一个参数,你可以这样做:
printf("%s\n", argv[argc - 1]);
例如:
我有一个程序,它接受一个参数列表并一个一个地打印每个参数后跟换行符 \n
。
代码:
#include <unistd.h>
int main(int argc, char **argv)
{
int i;
int j;
while (argv[i])
{
j = 0;
while (argv[i][j])
{
write(1, &argv[i][j], 1);
j++;
}
write(1, "\n", 1);
i++;
}
}
注意:此程序不使用任何内置函数(wite
除外)。
如果您尝试编译并执行此代码:
➜ Desktop gcc test.c
➜ Desktop ./a.out test test1 test2
./a.out
test
test1
test2
➜ Desktop