使用argc和argv []构建尾程序

时间:2013-03-14 14:23:17

标签: c tail argv argc

练习请求带有argc和argv []的尾部程序。它将有一个特定的行数。用户将放置一个N参数,而程序将打印最后n行。当我从cmd调用此程序时作为尾部3程序名称程序打开,但它不打印任何东西。这是代码。

#include <stdio.h>
int main (int argc,char *argv[])
{
    char *linja[]={"Mjeshter Ciko", "Sisteme Elektronike" , "Bisha" , "Super Mario Bros" , "Pallim Gjoni"};
    int i=0;
    if (argc!=3)
    {
               printf("Your Request can't be completed\n");
               printf("The format is Tail X Program Name\n");
               return -1;
               }
    if(*argv[1] <= 4)
    {
                printf("The Last Lines Are: \n");
                for(i=4 ;*argv[1]>=0; i--,*argv[1]--)
                {
                        printf("%s\n",linja[i]);
                        }
                        }
                        return 0;
                        }

2 个答案:

答案 0 :(得分:4)

表达式*argv[1] <= 4将为false。 argv[1]字符串*argv[1]是该字符串的第一个字符。您必须将数字的文本表示转换为正确的数字。

请改为strtol(argv[1], NULL, 10) <= 4

答案 1 :(得分:1)

在比较之前,您必须将字符串转换为整数。这一行:

if(*argv[1] <= 4)

正在比较第一个字符串的地址是否小于4,这不是你想要的。

使用strtol将字符串转换为整数:

char *endptr;
    long N = strtol(argv[1], &endptr, 10);
    /* error checking for conversion failure*/

然后比较:

if(N <= 4)

for循环条件中存在同样的问题。