2017-11-09 1 views
1

나머지 프로그램에 필요한 명령에 대한 명령 줄 인수를 확인하기 위해 strcmp를 사용하여 주어진 인수가 올바른지 테스트하려고했습니다.C++ strcmp 명령 줄 인수 비교

if((argc != 2) || (strcmp(argv[1], "-first") != 0) || (strcmp(argv[1], "-all") != 0)) 
    return -1; 

이 코드는 다음과 같은 오류와 함께 즉시 가까운 프로그램 원인 : 나는 문제가 두 STRCMP 함수 호출에서 오는 것으로 확인되었습니다

Program ended with exit code: 255 

을, 그러나 나는 연구 한에서 무엇을, I 올바르게 사용하고있어.

답변

2

이 if 문은 항상 입력됩니다. argv[1]이 두 문자열 중 하나와 같지 않으면 입력합니다. 그러나 그것은 항상 사실 일 것입니다. 그것이 -first 인 경우 분명히 -all이 아닙니다. -all 인 경우 분명히 -first이 아닙니다.

그래서 프로그램은 항상 일부 오류 상태와 함께 반환됩니다.

if(argc != 2 || (strcmp(argv[1], "-first") != 0 && strcmp(argv[1], "-all") != 0)) 
    return -1; 

내가 일부 지나치게 신중 괄호를 제거하는 자유를했다 : 당신이 원하는 무엇

argv[1]이 옵션 모든 동일하지 있는지 확인합니다. 적절한 어휘 연산자 우선 순위를 알아야합니다. 괄호를 과도하게 사용하면 코드가 불필요하게 복잡해집니다. 이 명확 해 지도록을 추가하거나 실제로 필요한 경우에만 적용하십시오.