MFC 파싱함수 관련 질문좀 드리겠습니다 (AfxExtractSubString)
글쓴이: nasescobar1 / 작성시간: 화, 2018/06/19 - 2:36오후
이 함수의 사용법이
AfxExtractSubString('저장할 변수", "파싱할문자열", "파싱할구역", "구분자");
인 것으로 알고 있습니다.
근데 저 같은 경우 Edit Control 박스를 활용해서 이것에 구분자를 하나 입력하고 (,든 /든)
그 구분자에 맞춰서 파싱을 해주려고 하는데요
저 구분자를 삽입해야하는 인자 항목에 변수를 집어넣을 수는 없는건가요?
m_InputSymbol.GetWindowText(nInputSymbol);
이와 같이 구분자를 저장받아
AfxExtractSubString(nOutputText, nInputText, 0, nInputSymbol);
이렇게 사용하려고 했더니,
error C2664: 'AfxExtractSubString' : 매개 변수 4을(를) 'CString'에서 'TCHAR'(으)로 변환할 수 없습니다.
라는 오류가 발생하기에 질문드립니다.
Forums:
Quote:매개 변수 4을(를) 'CString'에서
=> 매개 변수 4에는 'TCHAR' 타입이 들어와야 하는데 'CString' 타입이 들어왔습니다.
결론부터 말씀드리면, 변수도 넣을 수 있습니다. 타입만 맞는다면요.
https://msdn.microsoft.com/ko-kr/library/aa991543.aspx
즉 구분자로는 CString 타입의 문자열이 아니라 TCHAR 타입의 문자 하나가 들어와야 한다는 거죠.
TCHAR이 char이냐 wchar_t이냐 하는 골치아픈 문제는 요즘에는 별로 신경 안 써도 된다면, 아마 그냥 대충 이렇게만 해도 될 겁니다.
AfxExtractSubString(nOutputText, nInputText, 0, nInputSymbol[0]);
아 물론, nInputSymbol는 한 글자짜리 문자열이어야 합니다.
감사합니다
친절한 답변 감사드립니다! 배열 0번인덱스를 주는 방법도 좋지만~ 혹시나 2개 이상의 구분자가 입력되는 경우를 대비해서 TCHAR과 CString을 변환하면서 하면 어떨까 싶어
TCHAR tInputSymbol = (TCHAR)(LPCTSTR)nInputSymbol;
이런 식으로 변환해서 인자로 줘봤는데 되지는 않는군요.. ㅠㅠ
AfxExtractSubString함수는 구분자로
AfxExtractSubString함수는 구분자로 문자 하나(TCHAR)를 받습니다. 구분자 하나에 대해서만 동작하는 알고리즘이 구현되어 있을 것입니다. 캐스팅 같은 억지스러운 수단을 동원한다고 해도 그 사실이 바뀌지는 않습니다.
사람을 상대할 때는 (귀하가 갑이라면) 억지스러운 요구를 해도 최대한 맞춰 줄지도 모르지만, 컴퓨터에게는 (아직은) 그런 걸 기대할 수 없지요.
TCHAR tInputSymbol = (TCHAR)(LPCTSTR)nInputSymbol;
와 같은 캐스팅이라니, 각 타입들이 정확히 어떤 것인지 이해하고 계신다면 이런 끔찍하고 무시무시한 발상을 하시기는 어려우셨을 텐데요.타입 캐스팅은 위험한 도구입니다. 게다가 컴파일러는 프로그래머가 이 도구를 잘 이해하고 적절히 사용했으리라는 가정을 하기 때문에, 정말로 컴파일할 수 없는 경우를 제외하면 아무리 넌센스더라도 좀처럼 경고 하나 해 주지 않습니다.
그러니 본인이 무엇을 하려는지 정확하게 파악할 수 있는 상황이 아니라면, 타입 캐스팅의 이용은 가능한 한 지양하시는 게 좋겠다는 말씀을 드리고 싶네요.
심히 불편하네요
제가 몰라서 그렇게 형변환을 했다고 생각하세요??
구분자가 하나 이외에 둘 이상 입력될 경우 오류가 발생할 수 있어 예외처리 한 겁니다.
묻는 말에나 대답하지 도대체 얼마나 잘나셨길래 사람을 그렇게 무안주고 가르쳐드려는지
참..ㅋㅋㅋ 경력이 높을수록, 실력이 뛰어날수록 겸손해야한다는 사실은 잘 모르시는 것 같네요
남을 가르쳐들지 말고 자신 스스로 개발 역량이 부족하진 않은지 생각해보시길 바랍니다.
댓글 달기