我知道这是相当基本的,但我仍然被卡住了。所以我有一个函数,需要取一个变量n,这是我的主要函数
int main(int argc, char* argv){
sort(argv[1]);
}
我这样称呼这个程序:
./sort 4 <text.txt
但是数字4不会被识别或传递到函数中。我做错了什么?我知道argv[0]应该保存程序本身的名称,从那时起,每个程序都应该保存参数。
您应该尝试将它们全部打印出来。
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i = 0;
for (; i < argc; ++i) {
printf("argv[%d] = '%s'n", i, argv[i]);
}
return 0;
}
用./a.out 4 < /somefile
运行该代码给了我:
argv[0] = './a.out'
argv[1] = '4'
最终,您必须记住,"4"是一个指向字符数组的指针,您可能需要将其解析为一个整数。
char *argv
不正确。您得到了一个char*
("Strings")数组,因此声明main
的正确方法是int main(int argc, char *argv[])
或等效的int main(int argc, char **argv)
(在后一种情况下,数组参数有效地转换为指向数组第一个元素的指针)。
您在当前版本的代码中检索的是环境提供给您的参数指针数组中的第二个char
,它被重新解释为字符数组,这完全是另一回事。
正如其他人所描述的,你知道如何获取所有参数,但不知道"<text.txt".
这不是程序的参数,而是shell的参数。这是输入重定向,意味着文件的输入将进入程序,就像它来自stdin(键盘)一样。
为了防止这种情况,只需这样调用您的程序:
./sort 4 text.txt
我不确定你调用的函数"排序"是什么。