현재 위치: > 최신 기사 목록> strcmp 함수를 사용할 때 빈 문자열을 처리하는 방법

strcmp 함수를 사용할 때 빈 문자열을 처리하는 방법

gitbox 2025-05-29

더 깊이 들어가기 전에 STRCMP 의 기본 사용법을 살펴 보겠습니다.

 <?php
$result = strcmp("apple", "banana");
echo $result; // 출력 음수,왜냐하면 "apple" 보다 적습니다 "banana"
?>

strcmp 의 반환 값의 의미는 다음과 같습니다.

  • 0 미만 : 첫 번째 문자열은 두 번째 문자열보다 작습니다.

  • 0과 같다 : 두 줄은 같다

  • 0보다 큽니다 : 첫 번째 문자열은 두 번째 문자열보다 큽니다.

문제가 발생합니다. 문자열이 비어있을 때 어떻게됩니까?

비어있는 문자열이있는 경우 예를 들어

 <?php
$str1 = "";
$str2 = "banana";

$result = strcmp($str1, $str2);
echo $result; // 출력 음수
?>

결과는 여전히 부정적입니다. 이것은 strcmp가 빈 줄을 올바르게 처리 할 수 ​​있으며 오류를보고하지 않을 것임을 보여줍니다. 그러나 문제는 - 그러한 비교를 기대합니까?

많은 프로그래머가 STRCMP를 사용하는 경우, 실제 의도는 두 "비어 있지 않은"문자열이 동일한 지 여부를 결정하는 것입니다. 그들 중 하나가 비어 있으면 비즈니스 논리에 문제가 있다는 것을 의미 할 수 있습니다. 예를 들어, 사용자가 사용자 이름을 비어 있고 다른 하나는 데이터베이스의 기존 사용자 이름 인 경우 사용자 이름이 먼저 비어 있는지 확인해야합니까?

다루는 올바른 방법 : 먼저 문자열이 비어 있는지 판단합니다.

 <?php
if ($str1 === "" || $str2 === "") {
    echo "적어도 하나의 문자열이 비어 있습니다,비교할 수 없습니다。";
} else {
    if (strcmp($str1, $str2) === 0) {
        echo "두 줄은 동일합니다";
    } else {
        echo "두 줄은 다릅니다";
    }
}
?>

이렇게하면 논리적 오류를 피할 수 있습니다. STRCMP 자체가 빈 문자열을 처리 할 수 ​​있더라도 비즈니스 관점에서 빈 문자열인지 먼저 결정하는 것이 더 안전합니다.

또 다른 일반적인 오해 : 사용 == 직접 비교하십시오

 <?php
if ($str1 == $str2) {
    echo "동일한";
}
?>

이 글쓰기는 더 간단하지만 일부 경우 유형 변환 문제로 이어질 수 있습니다.

 <?php
$str1 = 0;
$str2 = "a";

if ($str1 == $str2) {
    echo "동일한"; // 산출,왜냐하면 "a" 변환됩니다 0
}
?>

따라서 느슨한 비교 대신 strcmp 또는 ===를 사용하는 것이 좋습니다.

예 : 사용자 입력 확인 시나리오

 <?php
function isValidUsername($input) {
    $reserved = "admin";
    
    if (trim($input) === "") {
        return "사용자 이름은 비어있을 수 없습니다";
    }

    if (strcmp($input, $reserved) === 0) {
        return "사용자 이름을 예약 할 수 없습니다";
    }

    return "유효한 사용자 이름";
}

echo isValidUsername("");        // 사용자 이름은 비어있을 수 없습니다
echo isValidUsername("admin");   // 사용자 이름을 예약 할 수 없습니다
echo isValidUsername("guest");   // 유효한 사용자 이름
?>

이 예는 빈 판단을 STRCMP 와 우아하게 결합하여 판단을 내리는 방법을 보여줍니다.

요약

strcmp를 사용하여 문자열을 비교할 때, 빈 문자열이 관련된 경우, 함수 자체는 오류를보고하지 않지만 비즈니스 로직이 올바른 것은 아닙니다. 제안 된 관행 :

  1. 먼저 빈 문자인지 여부를 결정한 다음 비교하십시오.

  2. Trim ()을 사용하여 불필요한 공백을 지우십시오.

  3. 느슨한 비교를 사용하여 발생하는 유형 변환 문제를 피하십시오 ( == ).

  4. 문자열 비교의 컨텍스트가 명확하고 사전 순서입니까? 동일합니까? 사례에 민감합니까?

이러한 방법을 통해 문자열 비교 로직이 더욱 엄격하며 많은 숨겨진 버그를 피할 수 있습니다. 사용자 입력 처리, URL 매개 변수, 구성 값 등과 같은 시나리오에서 STRCMP가 발생하면 이러한 기술을 사용하여 코드 견고성을 향상시킬 수 있습니다.

참조 링크