[Powered by Google Translate] [命令行参数]
克里斯托弗·巴塞洛缪 - 哈佛大学]
[这是CS50 - CS50.TV]
一个程序一个有用的功能是接受用户的输入。
到目前为止，我们已经探讨了一些功能在CS50库
来接受用户输入，如“字符串，”
它提示用户，应用程序正在运行时，为一个字符串。
>> 然而，在某些情况下，你要提供你的程序输入
它实际上是在运行。
通过这种方式，你不必问从用户的其他信息
在执行一个简单的任务。
举个例子，在UNIX的MV或移动命令。
该命令允许用户将一个文件从一个位置到另一个。
根据手册页，MV接受两个命令行参数：
正在被移动的文件和该文件的位置被移动到。
因此，这个例子中有一个命令有两个参数。
那么，我们如何告诉我们的C程序来使用这些命令行参数？
>> 哦，原来是主要的，这是我们在所有的C程序中使用，有一个秘密。
主要有两个参数：argc和argv。
让我们对这些条款。
>> 第一个参数是argc，它代表的参数计数，
有一个数据类型的整数。
argc参数包含参数的个数，包括命令。
在我们的移动命令，虽然我们只有两个参数显示，
ARGC的值将是3。
第二个参数，argv的，它代表的参数向量，
是指向字符串的字符指针数组。
>> 这意味着，每个元素在argv，从零开始，
包含的命令和参数。
例如，ARGV [0]，我将把为ARGV零，
总是包含正在运行的命令 -
在这种情况下，毫伏。
ARGV [1]将包含第一个参数，file.txt的，
和argv [2]将包含第二个参数，〜/ CS50 /。
最后一个参数argv的永远是空的。
因此，让我们执行这些命令行参数。
在前面的练习中，我们把无效的，没什么意思，作为主要的参数。
然而，为了使用命令行参数，
我们需要删除无效和地点内的主要诠释argc，焦炭*的argv []。
现在，访问整个从argv元素，这是你的论点，
你可以简单地重复，循环，通过这样的数组。
，里面的主的身体，我们要继续前进，然后键入一个for循环：
（INT I = 0;我ARGC，我+ +）。
>> 我们不需要一个大括号，在这里，因为我们只执行一行代码
身体内的这个循环。
我们将继续前进，一次打标签，
然后输入输出（ARGV [D]，代表一个整数值，
是％s，对于字符串，然后换行字符。
然后，我们提供printf我为当前迭代循环
和argv [i]的当前命令行参数的字符串表示形式。
当我们运行它带有两个参数，我们可以看到在终端上显示的参数。
刚才我们说的argv举行的字符指针数组。
>> 所以，如果是这样的话，怎么那么，我们访问每个参数的单个字符？
例如，如果我想寻找一个特定的字符中的第一个参数呢？
那么，答案是，我们需要申请一个嵌套循环
在参数字符串中的每一个元素，然后遍历。
这是你如何做到这一点。
>> 首先，我们要去副本的example2.c的。
然后，在第一个for循环，
我们要添加一个额外的循环。
因此，对于（J = 0，N = strlen的（的argv []）
然后给了我们当前参数的长度，
J <N; J + +）
我们要打印的每一个字符的位置
内的当前参数使用printf。
所以，printf的（“ARGV [D]，代表当前参数的索引，
然后按[％D]再次的，代表了当前字符的当前参数，
是：％C，在当前字符的参数。
最后，我们提供printf外循环的索引，我
然后索引的内部循环。
>> 而我们的最后一个参数为输出的参数是实际的字符
在命令行中。
现在，因为我使用了字符串函数strlen获得一个字符串的长度，
我还必须添加string.h中的库的顶部，我们有。
因此，要做到这一点，我们就上去，刚下stdio.h中，我们该怎么办
＃包括文件。
>> 所以，让我们编译和运行，并为它提供的实际参数。
>> 而且，我们可以看到，我们现在已经在参数的确切位置，每个单独的字符。
所以，就是这样。我是克里斯托弗·巴塞洛缪，这是CS50。
[CS50.TV]