我正在编写一个程序,我想接受命令行参数,但是当我传递任何args时,它就好像始终调用start一样。我的代码如下。任何帮助表示赞赏。
//compile to iservices
// Ilkotech Services - C Core
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s start|shutdown|reload\n",argv[0]);
}
else {
if (strcmp(argv[1],"start") != 0) {
services_start();
}
else if (strcmp(argv[1],"shutdown") != 0) {
services_shutdown();
}
else if (strcmp(argv[1],"reload") != 0) {
services_reload();
}
else {
printf("%s is not a valid argument\n",argv[1]);
printf("Usage: %s start|shutdown|reload\n",argv[0]);
exit(1);
}
}
return 0;
}
int services_start() {
printf("Started.\n");
return 0;
}
int services_shutdown() {
printf("Shutting down!\n");
return 0;
}
int services_reload() {
printf("Reloading services configuration.\n");
return 0;
}
答案 0 :(得分:7)
strcmp
返回0.
C11(n1570),§7.24.4.2
strcmp
功能
strcmp
函数返回大于,等于或小于零的整数, 因此,s1
指向的字符串大于,等于或小于s2
指向的字符串。
一些程序员过去常常调用以下宏:
#include <string.h>
#define cmp_strings(a, b) (strcmp(a, b) == 0)
答案 1 :(得分:0)
根据the online C++ reference,如果字符串相等,strcmp()将返回零。在这种情况下,您的代码基本上会说,如果第一个参数不是“start”,请运行services_start()。