我知道这是相当基本的,但我仍然被卡住了。 所以我有一个需要接受变量n的函数,所以这是我的主函数
int main(int argc, char* argv){
sort(argv[1]);
}
我正在调用这个程序:
./sort 4 <text.txt
但是数字4没有被识别或传递给函数。我究竟做错了什么?我知道argv [0]应该保存程序本身的名称,并且每个程序都应该保存参数。
答案 0 :(得分:7)
你应该尝试打印它们。
#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'是一个指向字符数组的指针,你可能需要将它解析成一个整数。
答案 1 :(得分:3)
char *argv
不正确。您传递了一个char*
(“字符串”)数组,因此声明main
的正确方法是int main(int argc, char *argv[])
或等效int main(int argc, char **argv)
(在后一种情况下,数组 - 参数有效地转换为指向数组第一个元素的指针。
您在当前版本的代码中检索的是由重新解释为字符数组的环境赋予您的参数指针数组中的第二个char
,这完全是另一回事。
答案 2 :(得分:0)
如其他人所述,您知道如何获取所有参数,但不知道“&lt; text.txt”。
这不是你的程序的参数,而是shell的参数。这是输入重定向,这意味着文件的输入来自程序,就好像它来自stdin(键盘)。
为了防止这种情况,只需按照以下方式调用您的程序:
./sort 4 text.txt
我不确定你正在呼叫的“排序”功能是什么。