gpt4 book ai didi

c - 为什么程序应该进入 if 语句却没有进入

转载 作者:行者123 更新时间:2023-11-30 15:50:07 25 4
gpt4 key购买 nike

我正在尝试实现一个列出文件和目录的“ls”命令。我已将传入参数数组设置为以下内容:

argv[0] = "./a.out"
argv[1] = "-l"
argv[2] = "test.c"

这是我的代码(假设main函数将argcargv传递给函数I_AM_LS) :

#include "ls.h"

int I_AM_LS(int argc, char ** argv)
{
// 'INCLUDING_HIDDEN_FILE' indicates program performs ls including hidden files
// 'EXCLUDING_HIDDEN_FILE' indicates program performs ls excluding.
int hidden_flag = EXCLUDING_HIDDEN_FILE;
int detail_flag = SIMPLY; // default option in ls.
// 'IN_DETAIL' indicates program performs ls with additional information.
// 'SIMPLY' indicates program performs ls without.
char option;
int i;
DIR * dp;

while ((option = getopt(argc, argv, "al")) != -1)
{
switch (option)
{
case 'a':
hidden_flag = INCLUDING_HIDDEN_FILE;
break;
case 'l':
detail_flag = IN_DETAIL;
break;
default: /* '?' */
printf("invaild option.\n");
return -1;
}
}


if( argv[optind] != NULL && argv[optind + 1] != NULL) // multiple argument
{
; // I have not finished the corresponding code yet.
}
else
{
if( argv[optind] == NULL) // case 1
I_REALLY_CALL_ls("./", hidden_flag, detail_flag);
else
I_REALLY_CALL_ls(argv[optind], hidden_flag, detail_flag);
}
printf("optind %d %d\n", optind, argv[optind]);
return 0;
}
}

int main(int argc, const char * argv[])
{
I_AM_LS(argc, argv);
return 0;
}

在初始解析循环之后,程序不会进入 if 语句 'argv[optind] != NULL'。我们知道 optind 是 2 并且 argv[optind] 指向“test.c”,而不是 NULL,在调试中似乎有相同的行为模式。

将 argv 和 argc 传递给函数 I_AM_LS 是否有任何问题?我该怎么办?

注意:我正在 OS X 上使用 Xcode。

最佳答案

if( argv[optind] == NULL) // case 1
I_REALLY_CALL_ls("./", hidden_flag, detail_flag);
else if( argv[optind] != NULL && argv[optind] != NULL)
{
;
}

else if 中的条件是 argv[optind] != NULL,无缘由地评估了两次。因此,如果第一个条件不成立,而这个条件成立,则您什么都不做 (;),并且

else if( argv[optind] != NULL)
{
// single non-option arguemnt.
I_REALLY_CALL_ls(argv[optind], hidden_flag, detail_flag);
}

无法访问。

关于c - 为什么程序应该进入 if 语句却没有进入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com