2013-11-04 3 views
0

간단한 오류가 있습니다. 이 프로젝트는 기본 메뉴의 골격을 만드는 것입니다. 새로운 명령은 1에서 사용자가 입력 한 정수까지 계산합니다. 프로그램 실행 및 작품의
http://pastebin.com/pAi9EiEi"main.exe"에 오류가 있습니다.

나머지 : 내가 계속하기 전에, 나는 나의 .cpp 파일을 보유하고있는 페이스트 빈에 대한 링크를 게시했다. 그러나 오류는 간단합니다. 명령을 입력하자마자 충돌이 발생합니다. 오류 검사를 실행 한 후에 오류가 아니라 if 문이라는 오류를 발견했습니다.

char newCommand[] = "new"; 
+3

[학생에게 편지 열기] (http://meta.programmers.stackexchange.com/q/6166/64132) 유용 할 수 있습니다. –

+0

std :: string을 사용하는 것이 금지되어 있습니까? 그것이 허용된다면 코드는 훨씬 더 간단 해집니다. –

+0

@KateGregory 대소 문자를 구별하지 않고 비교할 것을 제외하고는 :) – kfsone

답변

3

"멀리 할 수 ​​있음) 나는 stricmp에 널을 통과 틀리지 않는 정의되지 않은 동작

입니다, 무엇을 복사하다 CMD2에와에 캡 감도없이 비교 다음 newCommand에 넣어 : "코드가 이런 짓을하면

, 그것은 그 자체로 cmd2의 전 내용을 비교하는 것 그것을하지 않을까요?

copy cmd2 -> newCommand 
is cmd2 == newCommand? 

이 "newCommand"로, 다음 루프의 첫 번째 반복에 복사 "열기"것 "열기"를 입력하고 더 - 이상 문자열 "새로운"어디서든 프로그램이없는 것입니다 사용자.

strstr은 첫 번째 문자열에서 두 번째 문자열을 검색합니다.

strstr("hello world", "world"); // returns pointer to 'world' in 'hello world' 
strstr("biscuit", "new"); // returns NULL to indicate new doesn't occur in 'biscuit' 

은 확실히 당신이 실제로하고 싶은 것은 단순히 :

if (stricmp(newCommand, cmd2) == 0) { 
    // match 
} 

덧붙여, 당신은 는 "newCommand"로 "CMD2"당신이 strcpy(destinationStr, sourceStr)을 사용할 것을 복사 할 않은 경우;

strcpy(newCommand, cmd2); 
2
:

이 라인이 어떻게해야 무엇
if (stricmp(strstr(newCommand, cmd2), newCommand) == 0) 

, CMD2에 무엇을 복사 한 다음에 모자를 구분하지 않고 그것을 비교 newCommand에 넣어입니다 :이 오류는 다음과 유사한 라인에

그 라인은 당신이 더

http://www.cplusplus.com/reference/cstring/strstr/

이 newcommand에 CMD2의 선두로부터 검색을 수행하고 경우는 null (그것에 대한 포인터를 반환 생각하지 않습니다 t는 그냥 일반 stricmp을 원하고 당신이 사본이 라인이 어떻게해야 무엇