2

我正在编写一个程序,并且我想接受命令行参数,但是当我传递任何参数时,它就像总是调用 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;
}
4

2 回答 2

7

strcmp如果两个字符串相等,则返回 0。

C11 (n1570), § 7.24.4.2strcmp函数
strcmp函数返回一个大于、等于或小于零的整数,相应地,因为指向的字符串s1大于、等于或小于指向的字符串s2

一些程序员曾经调用以下宏:

#include <string.h>
#define cmp_strings(a, b) (strcmp(a, b) == 0)
于 2012-11-18T17:55:47.433 回答
0

根据在线 C++ 参考,如果字符串相等, strcmp() 将返回零。在这种情况下,您的代码基本上会说,如果第一个参数不是“start”,则运行 services_start()。

于 2012-11-18T17:57:34.197 回答