C에서이 루프를 벗어날 수없는 이유는 무엇입니까?C에서 while 루프를 깨는 방법
char command[1];
scanf("%s", command);
while(1){
scanf("%s", command);
if(command == "q")
break;
}
C에서이 루프를 벗어날 수없는 이유는 무엇입니까?C에서 while 루프를 깨는 방법
char command[1];
scanf("%s", command);
while(1){
scanf("%s", command);
if(command == "q")
break;
}
당신이 뭘 하려는지에 따라는 scanf 형식 %c
대신 %s
할 수 있습니다. 그게 당신에게 하나의 차질을 줄 것입니다. 그러면 다음과 같이 "q"와 비교할 수 있습니다 : command[0]=='q'
.
그러나 다중 문자 명령을 사용하는 것이 좋을 수 있습니다.이 경우 strcmp와 긴 버퍼가 원하는 것입니다.
'명령'은 힙 세그먼트의 어딘가에있는 메모리 블록의 주소를 포함하는 변수이고, 'q'는 컴파일러에서 모든 상수 문자열이 저장되는 텍스트 세그먼트의 메모리 블록 주소로 바뀝니다. 즉 '=='연산자는 프로세스 메모리의 여러 세그먼트에서 두 개의 주소를 비교합니다. 그러므로 결코 진실이 아닙니다. strcmp 또는 strncmp 함수를 사용하여 문자열을 비교하고 이러한 문자열의 주소를 비교해야합니다.
정의되지 않은 동작이 있기 때문에. 문자열에 충분한 공간을 제공하지 않습니다. 당신은 그와 같은 문자열을 비교하지 않는다 ('strcmp()'사용). 'scanf()'의 결과를 확인해야한다. 'scanf()'를 두 번 연속 호출하는 것은 좋은 생각이다. –
그리고'strcmp'를 사용하십시오. –