2017-03-09 9 views
1

나는 다음과 같은 코드가 있습니다TCHAR 배열을 문자열과 연결하는 방법은 무엇입니까?

enter code here 
TCHAR szSystemDirectory[MAX_PATH] ; 
GetSystemDirectory(szSystemDirectory, MAX_PATH) ; 
_stprintf(szSystemDirectory, _T("%s"), L"\\"); 

AfxMessageBox(szSystemDirectory); 

szSystemDirectory 항상이 같은 변수지만, 최종 결과에 두 개의 슬래시를 연결하여 원하는 :

해결 방법

\?

도움이나 의견을 보내 주셔서 감사합니다.

+0

그냥 문자열 클래스를 사용하지 않는 이유는 무엇입니까? – PaulMcKenzie

+0

[이스케이프 문자를 사용했습니다.] (https://en.wikipedia.org/wiki/Escape_sequences_in_C) TLDR; '\'는 특별한 의미가 있습니다. "\\"는 하나의 슬래시입니다. 두 개를 원할 경우 4를 사용해야합니다. "\\\\" – user4581301

+1

TCHAR은 실제 유형이 아닙니다. UNICODE 플래그가 설정되어 있는지 여부에 따라 CHAR 또는 WCHAR로 설정되는 #define입니다. '_T()'와'L' 매크로를 서로 바꾸어 사용할 수 있기 때문에 UNICODE 플래그가 설정되어 있지 않으면 코드를 사용할 수 없습니다. – MrEricSir

답변

1

은 "두 개의 슬래시"일이 당신이에서 볼 뭔가가 아닌 경우 확실하지 않음 디버거 (하나의 슬래시가 이스케이프 된 것으로 표시되므로) - 가장 큰 문제는 의 내용을 _stprintf 호출로 덮어 쓰는 것입니다. 당신이 원하는 것은 \ 문자를 경로 끝에 인쇄하는 것이 었습니다. 시도

TCHAR szSystemDirectory[MAX_PATH + 2]; // 1 for null terminator, 1 for the slash 
UINT nCharactersWritten = GetSystemDirectory(szSystemDirectory, MAX_PATH); 
szSystemDirectory[nCharactersWritten] = _T('\\'); 
szSystemDirectory[nCharactersWritten + 1] = _T('\0'); 

또는 두 개의 슬래시 : 당신이 인쇄 기능을 사용하려면 당신이 시도 할 수 있도록

TCHAR szSystemDirectory[MAX_PATH + 3]; // 1 for null terminator, 2 for the slashes 
UINT nCharactersWritten = GetSystemDirectory(szSystemDirectory, MAX_PATH); 
szSystemDirectory[nCharactersWritten] = _T('\\'); 
szSystemDirectory[nCharactersWritten + 1] = _T('\\'); 
szSystemDirectory[nCharactersWritten + 2] = _T('\0'); 

_stprint_f이, 비주얼 스튜디오 2015에서 사용되지 않는 선언되었습니다

TCHAR szSystemDirectory[MAX_PATH + 2]; // 1 for null terminator, 1 for the slash 
UINT nCharactersWritten = GetSystemDirectory(szSystemDirectory, MAX_PATH); 
_stprintf_s(szSystemDirectory + nCharactersWritten, MAX_PATH + 2 - nCharactersWritten, _T("%s"), _T("\\")); 

또는 두 개의 슬래시에 대해서

TCHAR szSystemDirectory[MAX_PATH + 3]; // 1 for null terminator, 2 for the slashes 
UINT nCharactersWritten = GetSystemDirectory(szSystemDirectory, MAX_PATH); 
_stprintf_s(szSystemDirectory + nCharactersWritten, MAX_PATH + 3 - nCharactersWritten, _T("%s"), _T("\\\\")); 
1

\는 이스케이프 문자입니다. 예 : "\ n"은 개행을 코드합니다. 즉, \는 항상 다음 문자가 특수 문자로 취급된다는 것을 나타냅니다. 그래서 당신은 당신이 그것을 같은 방식으로 탈출 필요 문자 \ 문자를 원하는 컴파일러에게하고자 할 때 :

\\ codes a single \ 

\\\\ codes double slashes