【问题标题】:Linux:Handling empty argument in C [duplicate]Linux:处理 C 中的空参数 [重复]
【发布时间】:2015-04-19 22:42:42
【问题描述】:

尝试制作自己的 ls 命令,我面临的问题是,当我不传递任何参数时,我在执行时收到以下错误:

Segmentation fault (core dumped)

以下是我的代码:

int main(int argc, char* argv[])
{
    DIR *mydir;
    struct dirent *myfile;
    struct stat mystat;

    mydir = opendir("./");
    int print = 0;



    if (strcmp(argv[1],"-a") == 0)
     {
       print = 2;
     }
}

【问题讨论】:

  • if (argc > 1 && strcmp(argv[1],"-a") == 0)
  • 成功了!您可以在回答中提及它,以便我批准它:)
  • 不做临时选项解析;使用 getopt() 或 GNU getopt_long() — 或者,如果您使用 C++,则使用 Boost.Program_options。并且不要尝试将空指针与字符串进行比较;它会使您的程序崩溃。

标签: c linux


【解决方案1】:

因为你没有向你的程序传递任何额外的参数,strcmp(argv[1],"-a") 将是一个问题。你应该在这里查看argc

【讨论】:

  • 不是我问的,仍然是投票寻求帮助,如果您认为它对其他人有用,您可以投票:)
  • 即它崩溃是因为 argv[1] 为 NULL 并且 strcmp 不检查 NULL 参数。
  • 这是问题所在,您正在阅读 argv 数组边界之外的内容。 bluepixy 的答案还检查了给你的程序的争论的数量。如果 argc > 1 返回 false,cpp 不会检查 '&&' 的另一半,因此程序不会崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2018-12-15
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
相关资源
最近更新 更多