2009-12-27 4 views
2

나는 약 2 시간 동안 인터넷을 검색하고 어떤 해결책을 찾지 못한다. *멀티 바이트 문자 집합에서 _tcslen : WCHAR [1]을 const char *로 변환하는 방법?

'strlen' : cannot convert parameter 1 from 'WCHAR [1]' to 'const char *'

이 WCHAR [1] 숯불에서 const 변환하는 방법 :

내 프로그램은 내가 가진 코드에서 멀티 바이트 문자 집합이 있습니다

WCHAR value[1]; 

_tcslen(value); 

을 그리고 컴파일에, 나는 오류가 발생했습니다 ?

+0

무엇을하려고합니까? – avakar

답변

4

제가 WCHAR 배열은 단지 예이다하지 않은 매우 유용한 1 길이 가정 ...

_tcslen 함수 아니다; 이것은 _UNICODE 정의에 따라 strlen 또는 wcslen으로 확장되는 매크로입니다. 멀티 바이트 문자 세트 (즉, _UNICODE은 정의되지 않음)를 사용하고 있고 배열이 WCHAR 인 경우 wcslen을 명시 적으로 사용해야합니다.

(특별히 TCHAR를 사용하지 않는 한, 당신은 아마 _t 기능을 피하려고 http://msdn.microsoft.com/en-us/library/szdfzttz(VS.80).aspx에서 MSDN에서 - 아주 - 좋은하지 개요가있다,.? 사람이 더 나은 아무것도 알고 있지) WCHAR 소요 _tcslen

0

포인터 또는 배열은 UNICODE가 # 환경에 정의 된 경우에만 입력으로 사용됩니다. 오류 메시지에서

, 나는 그것이 유니 코드를 정의하는 가장 좋은 방법 컴파일러에 매개 변수로 전달하는 것입니다하지

이라고 말할 것입니다. 마이크로 소프트 C를 들어,/D 스위치

cl -c /DUNICODE myfile.cpp 

을 사용하거나 때 유니 코드가 #define에 의해 정의되어 있지 않은 경우 _tcslen가 문자 될 것 같은 TCHAR 및 WCHAR로 배열 선언을 변경할 수 있습니다. VS에서 프로젝트 설정에서

3

시도 설정 "사용 유니 코드"당신이 wcslen_tcslen을 원하는 경우는, strlen_tcslen은 "멀티 바이트를 사용"으로 설정합니다. 이미 언급 한 것처럼 _t 개의 접두사가 붙은 함수 (실제로는 많은 다른 매크로)는 프리 컴파일러 정의 값에 따라 "확장 된"매크로입니다.

또 다른 옵션은 코드에 WCHAR 대신 TCHAR을 사용하는 것입니다. 더 좋은 생각은 wchar_t 또는 char 유형 중 하나에 충실하고 적절한 기능을 사용하는 것입니다.

마지막으로 중요한 것은 질문에 C++ 태그가 붙어 있으므로 std::string (또는 std::wstring)을 사용하고 char 버퍼 대신 std::vector을 사용하는 것이 좋습니다. C API 함수를 사용하는 것은 사소하고 일반적으로 훨씬 안전합니다.

관련 문제