C++빌더에 입문하시는 중이신 것 같습니다.
일단, 그렇게 해도 됩니다.
먼저, Edit1->Text[1]은 스트링이 아니라 문자입니다. 스트링인 Text의 첫번째 문자를 가져온 거죠. 문자는 == 연산자로 비교가 가능하죠.
그런데 에러가 나는 것은 스트링 Edit1->Text이 완전히 빈 스트링일 경우에 첫번째 문자를 액세스하려고 했으니 당연히 에러가 난 겁니다.
그러니까 에러가 난 것은 == 연산자를 써도 되느냐 라고 걱정하신 것과는 전혀 무관한 문제이고요. 비교를 하는 것이 아니라 단순히 ShowMessage(Edit1->Text[1]) 이렇게만 해도 똑같은 에러가 납니다.
이런 경우처럼 빈 스트링일 수도 있어서 []를 써서 배열 인덱스로 첫번째 문자를 액세스하면 안되는 경우에는, 스트링 클래스의 SubString() 멤버 함수를 쓰면 됩니다. 스트링을 지정된 위치부터 지정된 길이만큼 잘라오는 함수인데요. 이걸 쓰면 빈 스트링인 경우라도 에러가 나는 대신 빈 스트링을 리턴하므로 안전합니다. 즉, 아래와 같이 하면 됩니다.
if( Edit1->Text.SubString(1, 1) == '0')
ShowMessage("0입니다");
else
ShowMessage("0이 아닙니다");
참고로 Edit1->Text는 스트링이라도 ==로 비교해도 됩니다. 그 이유는, Edit1->Text는 C/C++의 널종료 문자열, 즉 포인터가 아니라 AnsiString 혹은 UnicodeString이라는 스트링 클래스이고, == 연산자가 오버로드되어 있기 때문입니다.
이런젠 님이 쓰신 글 :
: EditBox에 입력받은 값이 첫글자가 0이면 명령문을 실행시킬려고 합니다
:
:
: if( Edit1->Text[1] == '0') // AnsiString을 배열로 참조하면 첫글자의 index는 1
: ShowMessage("0입니다");
: else
: ShowMessage("0이 아닙니다");
:
:
: 다음과 같이 코딩했구요 실행시켜본 결과 별문제 없이 정상작동하는데
:
: 보통 문자비교문은 strcmp()같이 문자열 비교함수를 이용하지 '==' 와 같은 비교연산자는 사용하지 않은데
:
: 저런식으로 코딩해도 될련지요?
:
:
: if( strcmp(Edit1->Text[1], '0'))
:
:
: 위와같은식으로 코딩했더니 에러가 발생됩니다. 가르침 부탁드립니다
|