C命令行参数检查
C command line argument check
我有下面的代码部分,我注意到如果我将 0 更改为 1,结果是相同的。我得到 STACKprint();
和 "on" 作为第二个参数,没有任何其他参数,如果没有参数,我会得到一个分段错误。我想对于分段错误,我需要检查参数是否为 NULL
,但我不确定如何使用第二个参数执行此操作,这让我很困惑,为什么 (strcmp (argv[2],"on") == 1)
没有效果。它不应该取真值吗?
if (strcmp (argv[2],"on") == 0) {
STACKprint();
printf("\n");
}
为了避免段错误,检查 argc
的值以发现 argv[2]
是否存在。如果 argc < 3
,未提供 argv[2]
。
strcmp()
没有 return true/false;它 return 是一个小于、等于或大于零的值,具体取决于其参数的相对值。
如果你的程序是这样的
#include <stdio.h>
int main (int argc, char**argv)
{
if (argc >= 3 && strcmp (argv[2],"on") == 1){
// STACKprint();
printf("\n");
}
}
然后你尝试用myexe 1 on
运行它,它永远不会进入if块
如果您将 1 更改为 0,它就会消失。
还有其他问题。
如果你能post你的代码和调用它的方式就好了。
首先,要检查是否有参数,你应该使用main(int argc, char** argv)
的argc变量,它指示你的argv数组的长度。
if (argc < 3) {
printf("missing argument\n");
exit(-1);
}
至于strcmp
,手册页仅说明如果参数中的两个字符串相等则returns 0,否则非零...但不一定为1。实际上它取决于实现。因此,使用它来检查字符串相等性的方法是:
if (0 == strcmp(argv[2], "on")) {
// do something
} else {
// do something else
}
我有下面的代码部分,我注意到如果我将 0 更改为 1,结果是相同的。我得到 STACKprint();
和 "on" 作为第二个参数,没有任何其他参数,如果没有参数,我会得到一个分段错误。我想对于分段错误,我需要检查参数是否为 NULL
,但我不确定如何使用第二个参数执行此操作,这让我很困惑,为什么 (strcmp (argv[2],"on") == 1)
没有效果。它不应该取真值吗?
if (strcmp (argv[2],"on") == 0) {
STACKprint();
printf("\n");
}
为了避免段错误,检查 argc
的值以发现 argv[2]
是否存在。如果 argc < 3
,未提供 argv[2]
。
strcmp()
没有 return true/false;它 return 是一个小于、等于或大于零的值,具体取决于其参数的相对值。
如果你的程序是这样的
#include <stdio.h>
int main (int argc, char**argv)
{
if (argc >= 3 && strcmp (argv[2],"on") == 1){
// STACKprint();
printf("\n");
}
}
然后你尝试用myexe 1 on
运行它,它永远不会进入if块
如果您将 1 更改为 0,它就会消失。
还有其他问题。
如果你能post你的代码和调用它的方式就好了。
首先,要检查是否有参数,你应该使用main(int argc, char** argv)
的argc变量,它指示你的argv数组的长度。
if (argc < 3) {
printf("missing argument\n");
exit(-1);
}
至于strcmp
,手册页仅说明如果参数中的两个字符串相等则returns 0,否则非零...但不一定为1。实际上它取决于实现。因此,使用它来检查字符串相等性的方法是:
if (0 == strcmp(argv[2], "on")) {
// do something
} else {
// do something else
}