练习请求带有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;
}
答案 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循环条件中存在同样的问题。