2012-11-18 2 views
2

프로그램을 작성 중이며 명령 인수를 허용하려고합니다. 그러나 인수를 전달할 때 start가 항상 호출되는 것처럼 작동합니다. 내 코드는 아래와 같습니다. 어떤 도움을 주셔서 감사합니다.C 프로그램이 인수를 올바르게 읽지 못함.

//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; 
} 

답변

7

strcmp은 두 문자열이 모두 같으면 0을 반환합니다.

C11 (n1570) 7.24.4.2는 strcmp 함수 strcmp 함수 정수,보다 같거나 0보다 작은 반환
, 문자열은 s1 가리키는 따라서 같이이 크다 § 같음 또는 같음 또는보다 작음 s2이 가리키는 문자열보다 큼. 다음 매크로를 호출하는 데 사용

일부 프로그래머 : 문자열이 동일한 경우

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

이것은 효과가 있습니다. 감사! – JohnHoulderUK

0

the online C++ reference에 따르면, STRCMP()는 0 반환합니다. 그렇다면 코드는 기본적으로 첫 번째 인수가 "시작"이 아닌 경우 services_start()를 실행해야합니다.

관련 문제