2017-01-17 7 views
-3

아래의 구문에서 온라인으로 설명을 찾고이 포럼에서 L"을 (를) 찾는 것은 어려웠습니다. Qt5 내부에 여기에 붙여 넣기에 너무 긴 응용 프로그램을 디버깅하고 있습니다. 나는이 마지막 오류를 해결하려고 노력하고있어 -> return L ""; < -. 아래 함수의 마지막 줄 중 하나. '리턴': 내가 받고있어 컴파일러 오류가 ...전에이 구문을 본 적이 없습니까? 누군가가 설명 할 수 있습니까? ..... "L" "

C2440입니다 'LPWSTR'

내 첫 번째 질문이 무슨 뜻 무엇에 '[1] const를 wchar_t를'에서 변환 할 수 없습니다 - -> L ""< -?

마지막으로이 컴파일러 오류를 어떻게 해결할 수 있습니까? wchar_t를 [1] 1 바이트이며, LPWSTR 그것을 변환 할 수 없습니다의 2 바이트이기 때문에

LPWSTR ImageThread::getLastErrorString(DWORD lastError) 
    { 
     DWORD result = FormatMessage(
      FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 
      NULL, 
      lastError, 
      LANG_USER_DEFAULT, 
      errorString, 
      sizeof(errorString), 
      NULL); 
     if (result > 0) 
     { 
      return errorString; 
     } 
     else 
     { 
      return L""; 
     } 
    } 

내 가정은 ??? 나는 이것이 중요한지 확실하지 않지만 Qt5의 툴바에서 또 다른 오류가 발생합니다. "오류 :"UTF-8 "인코딩을 사용하는"myfile.cpp "를 디코딩 할 수 없습니다."편집 할 수 없습니다. " 그것은 나에게 인코딩을 선택하는 옵션을 제공합니다. Qt5를 사용하여이 코드를 모두 다시 작성했기 때문에이 코드가 이전 버전의 Qt로 작성 되었기 때문에 이것이 확실하다고 생각합니다. 다시 말하지만, 위의 두 가지 질문과 관련이 있는지는 확실하지 않지만, 진행 상황에 대한 전체 그림을 그려야했습니다.

+0

이 포럼의 L ""에 대한 검색은 결과를 제공하지 않습니다 ._SO는 ** 아니 ** 포럼입니다! 업데이트 : _ 내 가정은 wchar_t [1]이 1 바이트이고 LPWSTR이 2 바이트이므로 변환 할 수 없습니다. 어떻게'wchar_t [1] '이 1 바이트라는 결론을 내렸습니까? 또는'LPWSTR'은 2 바이트입니까? 일반적으로, 컴파일러는'L ' "''const'에 대해 불평하고, 여러분의 함수는 non-'const' 값을 반환합니다. –

+0

http://stackoverflow.com/questions/6384118/what-does-the-l-in-front-a-string-mean-in-c – AlexanderVX

+1

오류에 관해 말할 수는 없지만 다음 내용을 읽을 수 있습니다. "L" "과 같은 문자열 리터럴 접두사 접두사 : http : //en.cppreference.com/w/cpp/language/string_literal – HolyBlackCat

답변

2

문자열 리터럴 (또는 문자 리터럴)이 "와이드"리터럴이되기 전에 ""과 같이 보이기 때문에 "L"(또는 'l')이 가장 좋습니다. 포함 된 주소는 char 대신 wchar_t이며 주소는 char * 대신 wchar_t *입니다.

C 및 C++ 표준은 어떤 와이드 문자가 정확하게 지정되지 않습니다. Windows에서는 일반적으로 UTF-16 문자열을 나타내는 16 비트입니다. 대부분의 유닉스 계열 시스템에서는 일반적으로 UCS-4의 문자열을 나타내는 32 비트입니다.

이 특별한 경우에는 L 뒤에 오는 ""은 단지 빈 문자열을 반환한다는 것을 의미합니다.