2013-10-17 125 views
0

我正在尝试创建一个文件,其中一个参数已传入方法并且类型为PCWSTR。我的代码创建的.url文件并保存网址到文件:如何将PCWSTR转换为char []或wchar_t []

 wchar_t array1[] = "[InternetShortcut]\nURL="; 
     wchar_t array2[] = pdwFavoriteUrl; 
     wchar_t * DataBuffer = new wchar_t[wcslen(array1) + std::strlen(array2) + 1]; 
     std::strcpy(DataBuffer,array1); 
     std::strcat(DataBuffer,array2); 

     // Write data to file 
     DWORD dwBytesToWrite = (DWORD)strlen(DataBuffer); 
     DWORD dwBytesWritten = 0; 
     BOOL bErrorFlag = FALSE; 

     bErrorFlag = WriteFile(hFile, DataBuffer, dwBytesToWrite, &dwBytesWritten, NULL); 

     if (FALSE == bErrorFlag) 
     { 
      // Log error 
      hr = E_FAIL; 
     } 
     else 
     { 
      if (dwBytesWritten != dwBytesToWrite) 
      { 
       // Log error 
       hr = E_FAIL; 
      } 
      else 
      { 
       // Log success 
       hr = S_OK; 
       //_tprintf(TEXT("Wrote %d bytes to %s successfully.\n"), dwBytesWritten, argv[1]); 
      } 
     } 

     CloseHandle(hFile); 

我知道,代码将无法编译原样,因为有Unicode和非Unicode字符串方法的说法相互矛盾。关注行是这一个:

wchar_t array2[] = pdwFavoriteUrl; 

pdwFavoriteUrl的类型是PCWSTR的和有没有办法解决它。请帮助将其转换为wchar_t [](首选)或char []。

+0

我只是从它创建一个'std :: wstring'并使用缓冲区(C++ 11)。 – chris

+0

数组无法用指针初始化。看起来你并不需要'array2'。 –

回答

1

AFAIK PCWSTR只是wchar_t*的别名,如果它是空终止的,最简单的事情就是使用它来构造std::wstring类型的对象。只要将它传递给构造器:

PCWSTR wcstr = L"My String"; 
std::wstring wstr(wcstr); 

std::wstring对象而不是作恶的东西,如工作:

wchar_t * DataBuffer = new wchar_t[wcslen(array1) + std::strlen(array2) + 1]; 

这可能会给你带来什么,但不愉快的问题和内存泄漏。

0

删除

wchar_t array2[] = pdwFavoriteUrl; 

并更改呼叫strcat

std::strcat(DataBuffer, pwdFavoriteUrl); 

(同样,在通话与pwdFavoriteUrl取代array2strlen

注意PCWSTR只是

typedef const wchar_t * PCWSTR; 
相关问题