将您的main
功能声明为
int main (int argc, char**argv) {
}
如果您将程序编译为myprog
可执行文件并调用它,myprog -20 somefile anotherfile
那么您将拥有:
argc == 4
&& strcmp(argv[0], "myprog") == 0
&& strcmp(argv[1], "-20") == 0
&& strcmp(argv[2], "somefile") == 0
&& strcmp(argv[3], "anotherfile") == 0
&& argv[4] == NULL
换句话说,您可能希望您的程序包含
int nblines = 10;
int main(int argc, char**argv) {
int argix = 1;
if (argc>1) {
if (argv[1][0]=='-')
{
nblines = atoi(argv[1]+1);
argix = 2;
}
for (; argix < argc; argix++)
tail (argv[argix]);
}
return 0;
}
您可以适当地实现您的void tail(char*filename);
功能。不要忘记编译所有警告和调试信息,例如gcc -Wall -g
在 Linux 上。使用您的调试器(gdb
在 Linux 上)调试您的程序。考虑到fopen
可能会失败,并使用errno
来显示适当的错误消息。
请注意,您不需要您的fgetline
功能。getline(3)函数是标准的
(在 Posix 2008 中)并且动态分配行缓冲区。