C ++의 문자 배열과 문자열 리터럴 비교
-
08-07-2019 - |
문제
캐릭터 배열이 있고 예를 들어 문자열 문자와 일치하는지 알아 내려고합니다.
char value[] = "yes";
if(value == "yes") {
// code block
} else {
// code block
}
이로 인해 다음과 같은 오류가 발생했습니다. 문자열 리터럴 결과와 비교하여 지정되지 않은 동작이 비교되었습니다. 나는 또한 다음과 같은 것을 시도했습니다.
char value[] = "yes";
if(strcmp(value, "yes")) {
// code block
} else {
// code block
}
이것은 컴파일러 오류가 발생하지 않았지만 예상대로 작동하지 않습니다.
해결책
std::strcmp
문자열이 같으면 0을 반환합니다.
다른 팁
STRCMP 문서를 확인하십시오. 힌트 : 부울 가치를 반환하지 않습니다.
ETA : ==
일반적으로 작동하지 않습니다 cstr1 == cstr2
비교 포인터, 따라서 비교는 경우에만 해당됩니다 cstr1
그리고 cstr2
두 가지가 발생하더라도 두 가지가 사전에 동일한 문자열을 참조하더라도 동일한 메모리 위치를 가리 킵니다. 당신이 시도한 것 (cstring을 문자 그대로 비교, 예를 들어 cstr == "yes"
) 특히 표준이 필요하지 않기 때문에 작동하지 않습니다. 합리적인 구현에서 나는 그것이 폭발 할 것이라고 의심하지만 cstr == "yes"
성공하지 못할 것 같지 않습니다 cstr
문자열이 상수 인 주소를 언급 할 가능성은 거의 없습니다. "yes"
에 살고.
STRCMP는 두 줄의 상대 순서가 무엇인지 나타내는 3 개 상태 값을 반환합니다. strcmp (a, b)와 같은 호출을 할 때 함수가 반환됩니다.
- a <b 일 때 값 <0
- 0 a == b
- a> b 일 때 값> 0
제휴하지 않습니다 StackOverflow