2012-04-04 2 views
0

이 질문은 다른 질문과 중복 될 수 있지만이 변경을하기 전에 올바른지 알고 싶습니다. 그래서 어쨌든 여기에서 질문 할 것입니다.C++ - TCHAR 어레이가 비어 있는지 확인하십시오.

if(NULL== m_sLogPath || _tcsicmp(m_sLogPath, trace_path)!=0){//code here} 

I :

TCHAR m_sLogPath[MAX_LOGPATH_LEN]; 

배열을 초기화하고 사용하지만, 잠시 후이 검사가되는 코드의 라인이있다 : 나는 유지하고 오래된 프로젝트에서 코드 줄이있다 m_sLogPath가 비어 있지만 NULL == m_sLogPath가 NULL인지 아닌지를 확인하는 무의미한 검사인지를 확인하는 if 문의 구문이 맞는지 확인하십시오. 나는 NULL == m_sLogPath 조각을 제거해야 할거야, 내 질문은 그 대신에 배열이 비어 있는지 확인해야 하는가? 모든 답변과 도움을 주셔서 감사합니다.

+1

당신이 '잠시 후'말할 때 당신은 여전히 ​​m_sLogPath와 직접 다루고되거나 임의의 지점에서 인수로 전달 된? – sji

+0

어쩌면 그 사람은 스택 할당에 대한 편집증 일뿐입니다. –

+1

원래 배열 (포인터가 인수로 전달 된 후)에 대한 포인터인지 단순히 말하면 매우 유효한 검사입니다. – sji

답변

8

똑같은 상황에서 끝나면 무의미한 검사입니다.

함수에 매개 변수로 전달하면 배열에 포인터가 없어 지므로 아무런 의미가 없습니다. 배열을 확인하는 대신에 거기 가서해야하는지

배열은 결코 비어

잘 비어 있습니다. 항상 MAX_LOGPATH_LENTCHAR 초가 포함됩니다. 그러나 다음은 트릭을 할 수 있습니다 :

if(m_sLogPath[0] == _T('\0') || _tcsicmp(m_sLogPath, trace_path)!=0) 
+0

_tcslen 함수를 사용하십시오. 나는 당신의 코드가 전 세계의 모든 C 컴파일러에서 작동한다는 것을 알고 있지만 어느 날 C를 모르는 사람은 그 코드를 이식해야 할 것이다. –

+0

Brilliant, 고맙습니다. Luchian, 함수에 매개 변수로 전달하는 방법을 알지 못했습니다. 가능한 경우 답변으로 표시됩니다. – DukeOfMarmalade

+0

@ 도움이 기쁩니다. –

3

m_sLogPath 배열은 항상 MAX_LOGPATH_LEN 문자가 포함되어 있습니다. MAX_LOGPATH_LEN이 0보다 큰 상수라고 가정하면, 배열은 실제로는 결코 비어 있지 않을 것입니다.

정말 확인하고 싶은 것은이 배열에 저장된 C 스타일 문자열이 비어 있는지 여부입니다. 그 다음의 경우, 할 수있는 간단한 방법의 경우는 다음과 같습니다

#include <tchar.h> 
#include <windows.h> 

const size_t MAX_LOGPATH_LEN = MAX_PATH; 
TCHAR m_sLogPath[MAX_LOGPATH_LEN]; 

int main() 
{ 
    if (m_sLogPath[0] == _T('\0')) 
    { 
     // m_sLogPath contains empty string. 
    } 
} 
관련 문제