簡體   English   中英

C程序無法正確讀取參數

[英]C program not reading arguments correctly

我正在編寫一個程序,我想接受命令行參數但是當我傳遞任何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;
}

如果兩個字符串相等,則strcmp返回0。

C11(n1570),第7.24.4.2的strcmp功能
strcmp函數返回一個大於,等於或小於零的整數,因此s1指向的字符串大於,等於或小於s2指向的字符串。

一些程序員習慣於調用以下宏:

#include <string.h>
#define cmp_strings(a, b) (strcmp(a, b) == 0)

根據在線C ++參考 ,如果字符串相等,strcmp()返回零。 在這種情況下,您的代碼基本上會說,如果第一個參數不是“start”,則運行services_start()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM