2011-12-28 3 views
0

strcpy를 몇 가지 문제를 갖는 '에'WCHAR의 * '에서 매개 변수 2을 변환 할 수 없습니다 또한 ...'의 strcpy는'</p> <p>여기 <code>strcpy' : cannot convert parameter 2 from 'WCHAR *' to 'const char *</code></p> <p>코드입니다 : <p></p>이 오류를 얻기 ... const를 문자 *

char FunctionName[ 256 ]; 
UFunction *pUFunc      = NULL; 
strcpy(FunctionName, pUFunc->GetFullName()); 

그리고 :

WCHAR* UObject::GetFullName() 
{ 
    if (this->Class && this->Outer) 
    { 
     static WCHAR ObjectName[ 256 ]; 

     if (Outer == NULL) 
     { 
      wsprintf(ObjectName, L""); 
     } 
     else 
     { 
      if (Outer->Outer) 
       wsprintf(ObjectName, L"%s %s.%s.%s", Class->Name.GetName(), Outer->Outer->Name.GetName(), Outer->Name.GetName(), Name.GetName()); 
      else if(Outer) 
       wsprintf(ObjectName, L"%s %s.%s", Class->Name.GetName(), Outer->Name.GetName(), Name.GetName()); 
     } 
     return ObjectName; 
    } 

    return L"(null)"; 
} 
,
+3

오류 메시지를 전달하는 거의 분명하다 -'strcpy' 단순히 넓은 다루지 않는다 C 스타일 문자열. 게다가, 일반적인 C 스타일의 문자열로 시도하고 저장하는 것은 실제로 의미가 없습니다. – Hurkyl

+0

'strcpy()'와'wcscpy()'는 문자열을 복사하는 것이지 문자열을 변환하는 것이 아님에 유의하십시오. 일반'char'와'WCHAR' 사이에서 변환하려면 다른 (비표준) 함수가 필요합니다. –

+1

코드가 매우 혼란 스럽습니다. 미리 명시 적으로 NULL로 설정 한 오브젝트 포인터의 멤버에 액세스하고 있습니다. –

답변

8

WCHAR 항목에는 strcpy가 아닌 wcscpy가 필요합니다. 그러나 실제 문제는 와이드 문자열을 좁은 문자열로 변환하려고한다는 것입니다. WideCharToMultiByte 당신은 Windows에있는 것 같습니다.

+0

나는 그것을 시도했다 ... '매개 변수 1을'char [256] '에서'wchar_t * '로 변환 할 수 없다. – E3pO

+0

@ E3pO : 분명히 두 매개 변수는 모두'wchar_t * '유형이어야한다. ASCII 문자열을 유니 코드로 먼저 변환하십시오. –

+0

@Niklas 그의 타겟이 좁기 때문에 함수의 넓은 결과를 좁은 문자열로 변환하려고합니다. – bmargulies

0

그것은 오류에서 꽤 명백하다 : strcpy와는 두 번째 매개 변수로 const char*을 기대하고이 경우, WCHAR*