我正在检查用户在调用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;
}
如果使用完整的代码并带有必需的标题:
#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
显然,验证已成功,因为已调用[C0]。文本“成功”仅是因为errcall()
的值为零-因为没有设置任何内容。
您在更改问题之前的原始代码有:
errno
所以当你说:
然后,即使我除了没有提出任何论点,我也取得了成功启动程序
合理地假设它是通过if(argc_input==1 || argc_input>2)errcall();
else exit(EXIT_SUCCESS);
终止的-显然不是这种情况。
Errno尚未设置。
exit(EXIT_SUCCESS);