【问题标题】:Build a tail program with argc and argv[]用 argc 和 argv[] 构建一个尾部程序
【发布时间】:2013-03-02 22:59:09
【问题描述】:

练习请求一个带有 argc 和 argv[] 的尾部程序。它将有特定数量的行。用户将输入一个 N 参数,然后程序将打印最后 n 行。当我从 cmd 调用这个程序时作为tail 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;
                        }

【问题讨论】:

  • 到目前为止,你是如何调试它的?

标签: c tail argv argc


【解决方案1】:

表达式*argv[1] &lt;= 4 将为假。 argv[1] 是一个字符串*argv[1] 是该字符串的第一个字符。您必须将数字的文本表示形式转换为适当的数字。

改用strtol(argv[1], NULL, 10) &lt;= 4

【讨论】:

  • 感谢您的回答。正如您第一次回答的那样,我给了您正确的答案。
【解决方案2】:

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

if(*argv[1] <= 4)

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

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

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

然后比较:

if(N <= 4)

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

【讨论】:

  • if(*argv[1] &lt;= 4) 不是无效的,它只是没有做 OP 期望它做的事情。
  • 函数中的参数太少
  • @Lind 是的,你必须传递基数和指向 char** 的指针。
  • 我给了你一票。你的答案是正确的,但我不能选择 2 个正确的答案。无论如何谢谢......
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 2014-06-01
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2013-09-08
  • 2013-05-27
相关资源
最近更新 更多