2013-10-17 126 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; 
相關問題