如何使用

问题描述 投票:-1回答:2
将错误处理导出到C中的函数

我正在检查用户在调用main时用户是否输入了正确的cmd参数数量和类型。

我认为编写一个输出一些文本的函数是一个好主意,因此我可以在检查NULL指针时重用它。我加入了<errno.h>

void errcall()
{
  perror("Error printed by perror()");
  exit(EXIT_FAILURE);
}

然后我编写了一个函数来检查参数是否正确和足够。

void err_cmd_handle(int argc_input)
{
  if(argc_input==1 || argc_input>2)errcall(); 
}

当我在主程序中调用它时,将int argc作为err_cmd_handle()的参数,即使我除了启动程序外没有给出any参数,也获得了成功。为什么条件无法正确检查?

int main(int argc,char* argv[])
{
    err_cmd_handle(argc);
    return 0;
 }
c refactoring exit errno strerror
2个回答
1
投票

如果使用完整的代码并带有必需的标题:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>

void errcall()
{
  perror("Error printed by perror()");
  exit(EXIT_FAILURE);
}
void err_cmd_handle(int argc_input)
{
  if(argc_input==1 || argc_input>2)errcall(); 
}

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

然后不带任何参数运行它,输出为:

Error printed by perror(): Success 

显然,验证已成功,因为已调用[C​​0]。文本“成功”仅是因为errcall()的值为零-因为没有设置任何内容。

您在更改问题之前的原始代码有:

errno

所以当你说:

然后,即使我除了没有提出任何论点,我也取得了成功启动程序

合理地假设它是通过if(argc_input==1 || argc_input>2)errcall(); else exit(EXIT_SUCCESS); 终止的-显然不是这种情况。


0
投票

Errno尚未设置。

exit(EXIT_SUCCESS);
© www.soinside.com 2019 - 2024. All rights reserved.